【问题标题】:HashMap messes up the order of its own elements [duplicate]HashMap弄乱了自己元素的顺序[重复]
【发布时间】: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。万分感谢。这意味着,如果我想对其进行排序,那将是无用的? ://

标签: java hashmap put elements


【解决方案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 对不起,这让我发疯了,我只是用一种方法声明它大声笑 -.-
            猜你喜欢
            • 2013-05-27
            • 1970-01-01
            • 1970-01-01
            • 2013-12-26
            • 1970-01-01
            • 2015-04-21
            • 2015-03-14
            • 1970-01-01
            • 2022-01-09
            相关资源
            最近更新 更多