对于像这样的地图:
Map<Integer, Integer> map = ...;
map.put(1, 1);
map.put(2, 2);
map.put(3, 3);
map.put(4, 4);
这是代码......
for (Integer i : map.keySet()) System.out.println(i);
for (Integer i : map.values()) System.out.println(i);
...保证两次打印相同的序列?
如果没有,例如java.util.HashMap
是否有任何保证?
答案 0 :(得分:17)
不,没有保证,虽然在实践中它会发生(没有充分的理由让地图为键和值使用不同的迭代器)。
如果您想保证迭代顺序,请迭代entrySet()
:
for (Map.Entry<Integer,Integer> entry : map.entrySet())
// ...
由于您询问HashMap
,因此请注意,对地图的任何更改都可能会更改迭代顺序,这是因为mapbeing已重新定位。
答案 1 :(得分:7)
不,不保证。一个是Set
,一个是Collection
,既不保证订单。
如果您想保留订单。可以LinkedHashMap()
与entrySet()
帮助您。
答案 2 :(得分:-1)