我有一个包含一些名称和数字的地图
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,结果仍然相同
答案 0 :(得分:5)
唯一不对的是你的期望。 Map
接口不保证迭代顺序,HashMap
实现基于散列函数,这意味着迭代顺序基本上是随机的,并且有时在添加新元素时会完全改变。
如果您想要特定的迭代订单,您可以选择:
SortedMap
与TreeMap
实现的接口 - 这些保证了根据密钥的自然顺序(或Comparator
实例强加的排序)的迭代顺序。LinkedHashMap
类按照元素添加到地图的顺序进行迭代。List
代替Map
- 这有一个明确定义的迭代顺序,您可以对其进行详细的影响。答案 1 :(得分:2)
我认为你需要LinkedHashMap。
答案 2 :(得分:0)
TreeMap将始终按自然顺序排列(除非您提供比较器)如果您看到任何不同的顺序,那么您将看到地图以及您正在使用它做什么。如果有疑问,请使用调试器,您将看到订单已排序。
答案 3 :(得分:0)
如果您希望以与之相同的顺序获取地图值,请使用LinkedHashMap
代替。