Java Map问题

时间:2010-12-25 18:42:31

标签: java data-structures

我有一个包含一些名称和数字的地图

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)。

它出了什么问题?当我打电话给这张地图时,有什么步骤我不知道吗?

编辑: 我改为HashMap,结果仍然相同

4 个答案:

答案 0 :(得分:5)

唯一不对的是你的期望。 Map接口不保证迭代顺序,HashMap实现基于散列函数,这意味着迭代顺序基本上是随机的,并且有时在添加新元素时会完全改变。

如果您想要特定的迭代订单,您可以选择:

  • SortedMapTreeMap实现的接口 - 这些保证了根据密钥的自然顺序(或Comparator实例强加的排序)的迭代顺序。
  • LinkedHashMap类按照元素添加到地图的顺序进行迭代。
  • 使用List代替Map - 这有一个明确定义的迭代顺序,您可以对其进行详细的影响。

答案 1 :(得分:2)

我认为你需要LinkedHashMap

答案 2 :(得分:0)

TreeMap将始终按自然顺序排列(除非您提供比较器)如果您看到任何不同的顺序,那么您将看到地图以及您正在使用它做什么。如果有疑问,请使用调试器,您将看到订单已排序。

答案 3 :(得分:0)

如果您希望以与之相同的顺序获取地图值,请使用LinkedHashMap代替。