简单的标题,我已经搜索过了,我没有发现任何关于这个问题的内容,我很确定我误解了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的事情,所以你帮我解决了,非常感谢你:)答案 0 :(得分:2)
如果您想通过插入订单迭代您的密钥,则需要使用LinkedHashMap
。 HashMap
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)
答案 4 :(得分:1)
http://docs.oracle.com/javase/7/docs/api/java/util/HashMap.html
此课程不保证地图的顺序;特别是,它不保证订单会随着时间的推移保持不变。
答案 5 :(得分:0)
有不同的地图类型,对其键顺序提供不同的保证(请参阅this)。
HashMap
:元素的未定义排序。
LinkedHashMap
:由插入定义的订单。
TreeMap
:由其元素的compareTo()
方法定义的顺序。
因此,HashMap不保证它的迭代顺序。插入另一个元素后,您将获得不同的顺序。根据您的描述,LinkedHashMap
可能就是您所需要的。