HashMap弄乱了自己元素的顺序[重复]
Posted
技术标签:
【中文标题】HashMap弄乱了自己元素的顺序[重复]【英文标题】:HashMap messes up the order of its own elements [duplicate] 【发布时间】:2015-04-25 05:17:59 【问题描述】:就像标题一样简单,我已经搜索过了,但我没有找到任何关于这个问题的信息,我很确定我只是误解了 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,所以你帮我解决了,非常感谢:)
【问题讨论】:
HashMap
的文档告诉你什么?
“当程序员将它们放入时,我很难 [sic] HashMap 存储的元素”是什么让你这么认为?
正如我所说,我很确定我误解了它的工作原理,我是对的 .o。万分感谢。这意味着,如果我想对其进行排序,那将是无用的? ://
【参考方案1】:
如果您想通过 insertion 顺序迭代您的密钥,您需要使用 LinkedHashMap
代替。 HashMap
documentation 明确指出
这个类不保证地图的顺序;特别是,它不保证订单会随着时间的推移保持不变。
【讨论】:
【参考方案2】:您正在寻找保留插入顺序的LinkedHashMap
。
【讨论】:
【参考方案3】:HashMap 不保证任何排序。
来自java docs:
这个类不保证地图的顺序
如果您想维护秩序,可以使用LinkedHashMap。
【讨论】:
【参考方案4】:http://docs.oracle.com/javase/7/docs/api/java/util/HashMap.html
这个类不保证地图的顺序;特别是,它不保证订单会随着时间的推移保持不变。
【讨论】:
【参考方案5】: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。
【讨论】:
【参考方案6】:有不同的 Map 类型,对它们的键顺序提供不同的保证(参见this)。
HashMap
: 其元素的未定义顺序。
LinkedHashMap
: 插入定义的顺序。
TreeMap
:由其元素的compareTo()
方法定义的顺序。
所以,HashMap 不保证它的迭代顺序。插入另一个元素后,您将获得不同的排序。根据您的描述,LinkedHashMap
可能就是您所需要的。
【讨论】:
即使现在我遇到了一点问题,我也在尝试使用 TreeMap,只是为了看看它是如何工作的,当我声明它的变量时,它会以蓝色突出显示变量名(我正在使用 eclipse),它应该以棕色之类的方式突出显示它,它不是真正的变量 oo 因为我无法使用它,当我将光标通过它时,我可以看到 javadoc,但是我之前写了一个javadoc来写它,我知道我不应该为了这些目的而这样做,但这只是我必须阅读的东西,我尝试将相同的代码放入另一个类,它可以工作:( Nvm 对不起,这让我发疯了,我只是用一种方法声明它大声笑 -.-以上是关于HashMap弄乱了自己元素的顺序[重复]的主要内容,如果未能解决你的问题,请参考以下文章