Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/351.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 关于映射和链接hashmap的混淆_Java_Collections_Linkedhashmap - Fatal编程技术网

Java 关于映射和链接hashmap的混淆

Java 关于映射和链接hashmap的混淆,java,collections,linkedhashmap,Java,Collections,Linkedhashmap,关于LinkedHashMap,我脑子里有这种困惑。 在Set中,我们没有任何键值对,因此当我们尝试打印Set元素时,我们不会像我们插入的那样为打印元素保留顺序,这意味着不保留顺序,但当我们使用LinkedHashSet时,这将确保保留顺序,由于我们已经在链接哈希集中插入了元素,所以在打印时我们将得到相同的顺序。这是有道理的 但是在Map的情况下,我们只使用key打印值,那么说LinkedHashMap保留顺序的逻辑是什么呢?我们应该使用key打印值,所以无论key-value对在哪里,key都

关于
LinkedHashMap
,我脑子里有这种困惑。 在
Set
中,我们没有任何键值对,因此当我们尝试打印Set元素时,我们不会像我们插入的那样为打印元素保留顺序,这意味着不保留顺序,但当我们使用
LinkedHashSet
时,这将确保保留顺序,由于我们已经在链接哈希集中插入了元素,所以在打印时我们将得到相同的顺序。这是有道理的

但是在
Map
的情况下,我们只使用key打印值,那么说
LinkedHashMap
保留顺序的逻辑是什么呢?我们应该使用key打印值,所以无论key-value对在哪里,key都会打印它的值。它必须进入地图并搜索该键,最后打印其值


我希望您能够了解我的问题。

当您迭代映射时,它将在链接的哈希映射中管理您的订单

这并不是说您总是只使用键来获取值。您需要从地图中获取所有元素,但您可能没有意识到这一点。例如-使用地图创建选择下拉列表

for (Map.Entry<String, String> entry : map.entrySet())
{
    System.out.println(entry.getKey() + "/" + entry.getValue());
}
for(Map.Entry:Map.entrySet())
{
System.out.println(entry.getKey()+“/”+entry.getValue());
}
那么说链接哈希映射保持顺序的逻辑是什么呢


LinkedHashMap
保留(默认情况下)键首次插入到映射的顺序。您可以使用
keySet
或使用
entrySet
迭代键,以按此顺序获取键/项。

首先,您可以不使用键访问map的值,您可以使用values方法。这一切都取决于场景。

除了前面提到的方法之外,您还可以使用以插入顺序遍历映射项。

您还可以遍历映射。内部设置在映射中包装。看一看HashSet和LinkedHashSetMap m=new HashMap()的代码;m.put(1,“1”);m.put(2,“2”);m.put(3,“3”);m.put(4,“4”);m.put(5,“5”);m.put(6,“6”);m.put(7,“7”);m.put(8,“8”);m.put(9,“9”);m.put(10,“10”);m.put(11,“11”);m.put(12,“12”);m.put(13,“13”);m.put(14,“14”);m.put(15,“15”);m.put(16,“16”);m.put(17,“17”);m.put(18,“18”);对于(Integer i:m.keySet()){System.out.print(“+m.get(i));}我总是得到输出1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 17 16 18所以,在链接哈希映射中保留的顺序有什么不同如果我使用链接哈希映射,我会得到相同的结果output@Max对于这些特定的键,您可以获得相同的顺序。将第一个条目更改为
m.put(10000,“1”)
,您将获得不同的订单。