Java Map问题

use*_*961 2 java data-structures

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

Map<String,Integer> abc = new HashMap<String,Integer>();
Run Code Online (Sandbox Code Playgroud)

它工作正常.我可以在其中加入一些值,但是当我在不同的类中调用它时,它会给我错误的顺序.例如:

我推了推

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);
    }
Run Code Online (Sandbox Code Playgroud)

一段时间它返回顺序(b,a,c)和一些时间(a,c,b).

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

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

Mic*_*rdt 5

唯一不对的是你的期望.所述Map接口使得没有关于迭代顺序保证,并且HashMap实现是基于散列函数,这意味着迭代顺序基本上是随机的,和当添加新的元素有时会彻底改变.

如果您想要特定的迭代订单,您有以下选项:

  • SortedMap具有TreeMap实现的接口- 这些接口根据密钥的自然顺序(或Comparator实例强加的排序)保证迭代顺序
  • 所述LinkedHashMap的顺序遍历类的元素加入到地图.
  • 使用a List代替a Map- 这具有明确定义的迭代顺序,您可以详细地影响它.