HashMap 打乱了自身元素的顺序

HashMap messes up the order of its own elements

正如标题一样简单,我已经搜索过了,但我没有找到任何关于这个问题的信息,我很确定我只是误解了 HashMap 如何处理它自己的元素。 Super-simplest代码:

HashMap<String, Integer> map = new HashMap<String, Integer>();
    map.put("first key", 1);
    map.put("second key", 2);
    map.put("third key", 3);

    System.out.println(map.toString());

println() 方法显示什么? 它显示了这个:

{third key=3, first key=1, second key=2}

我严格按照程序员放入的 HashMap 存储元素。 即使是排序也会像我把它们放在原点一样放置这些元素。 我尝试更改单词并发生类似的事情(只是位置发生了变化,但无论如何它们都是 "wrong")。 :/ 你知道为什么吗?

提前致谢:/

编辑:Rohit Jain 实际上是第一个回复我的评论,你们告诉我 LinkedHashMap,所以你们帮我解决了,非常感谢 :)

您正在寻找 LinkedHashMap 保留插入顺序。

如果您想通过 插入 顺序遍历您的键,您需要使用 LinkedHashMap 代替。 HashMap documentation 明确指出

This class makes no guarantees as to the order of the map; in particular, it does not guarantee that the order will remain constant over time.

HashMap 不保留顺序:

This class makes no guarantees as to the order of the map; in particular, it does not guarantee that the order will remain constant over time. --javadoc

你想要LinkedHashMap:

    LinkedHashMap<String, Integer> map = new LinkedHashMap<String, Integer>();
    map.put("first key", 1);
    map.put("second key", 2);
    map.put("third key", 3);

    System.out.println(map.toString());

输出:

{first key=1, second key=2, third key=3}

如果你只关心 toString,你也可以使用 TreeMap。

HashMap 不保证任何类型的排序。

来自java docs

This class makes no guarantees as to the order of the map

如果要维持秩序可以使用LinkedHashMap

http://docs.oracle.com/javase/7/docs/api/java/util/HashMap.html

此 class 不保证地图的顺序;特别是,它不保证顺序会随着时间的推移保持不变。

有不同的 Map 类型,对其键顺序有不同的保证(参见 this)。

HashMap: 未定义其元素的顺序。

LinkedHashMap: 顺序由插入定义。

TreeMap:顺序由其元素的compareTo()方法定义。

因此,HashMap 不保证其迭代顺序。插入另一个元素后,您将获得不同的排序。根据您的描述,LinkedHashMap 可能就是您所需要的。