HashMap弄乱了自己元素的顺序

时间:2015-02-23 18:59:09

标签: java hashmap put elements

简单的标题,我已经搜索过了,我没有发现任何关于这个问题的内容,我很确定我误解了HashMap如何使用自己的元素。 超级简单的代码:

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存储的元素。 即使是排序也会将这些元素放在原点上。 我尝试改变单词和类似的事情发生(只有位置改变了,但无论如何它们都是“错误的”)。 :/ 你知道为什么吗?

提前致谢:/

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

6 个答案:

答案 0 :(得分:2)

如果您想通过插入订单迭代您的密钥,则需要使用LinkedHashMapHashMap documentation明确指出

  

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

答案 1 :(得分:1)

您正在寻找保留广告订单的LinkedHashMap

答案 2 :(得分:1)

HashMap不保留顺序:

  

此课程不保证地图的顺序;特别是,它不保证订单会随着时间的推移保持不变。 - 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。

答案 3 :(得分:1)

HashMap不保证任何类型的订购。

来自java docs

  

此课程不保证地图的顺序

如果您想维持订单,可以使用LinkedHashMap

答案 4 :(得分:1)

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

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

答案 5 :(得分:0)

有不同的地图类型,对其键顺序提供不同的保证(请参阅this)。

HashMap:元素的未定义排序。

LinkedHashMap:由插入定义的订单。

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

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