Java map 问题

标签 java data-structures

我有一张 map ,其中包含一些名称和号码

Map<String,Integer> abc = new HashMap<String,Integer>();

效果很好。我可以在其中放入一些值,但是当我在不同的类中调用它时,它会给我错误的顺序。例如:

我放了

abc.put("a",1);
abc.put("b",5);
abc.put("c",3);

    Iterator<String> iter = abc.keySet().iterator();

    while (iter.hasNext()) {

        String name = iter.next();
        System.out.println(name);
    }

有时返回顺序 (b,a,c),有时返回顺序 (a,c,b)。

这有什么问题吗?当我调用此 map 时是否缺少任何步骤?

编辑: 我改成HashMap,结果还是一样

最佳答案

唯一错误的是你的期望。 Map 接口(interface)不保证迭代顺序,而 HashMap 实现基于哈希函数,这意味着迭代顺序基本上是随机的,并且有时会在新元素出现时完全改变已添加。

如果您想要特定的迭代顺序,您有以下选择:

  • SortedMap 与其 TreeMap 实现接口(interface) - 这些保证根据键的自然顺序(或由 Comparator< 强加的顺序)进行迭代顺序 实例)
  • LinkedHashMap 类按照元素添加到 map 的顺序进行迭代。
  • 使用 List 而不是 Map - 这具有明确定义的迭代顺序,您可以对其进行详细影响。

关于Java map 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4531231/

相关文章:

java - 为什么我收到错误?

Java batik : ClassNotFoundException: org. apache.batik.dom.svg.SVGDOMImplementation

java - 在 Java 中翻译异常消息

java - 如何将信息从 java 发送到 windows 任务栏到 javafx

c - 如何理解链表结构中的指针 'next'?

c# - 用于检查修改状态的数据类型或数据结构?

java - 如何使用java或groovy计算目录上的md5校验和?

java - 有效地利用位置来控制 Action

java - 类似文件系统的数据结构的快速且持久的表示

algorithm - 如果树分布在多台机器上,二叉树是否是二叉搜索树