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弄乱了自己元素的顺序[重复]的主要内容,如果未能解决你的问题,请参考以下文章

共享点日历​​弄乱了可访问性模式选项卡顺序

Angular 7+:在没有容器 HTML 元素的情况下渲染组件(弄乱了引导程序样式)

RecyclerView在滚动时弄乱了数据

HashMap和TreeMap的区别

HashMap和TreeMap的区别

TextView 提示弄乱了 RTL 重力