Map.keySet 和 Map.values 上的迭代顺序相同?

2022-09-04 01:23:46

对于像这样的地图:

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


答案 1

不,不能保证,尽管在实践中它会发生(映射没有充分的理由对键和值使用不同的迭代器)。

如果要保证迭代顺序,请迭代 :entrySet()

for (Map.Entry<Integer,Integer> entry : map.entrySet())
    // ...

既然您询问了 ,另请注意,由于地图被重新哈希,对地图的任何更改都可能会更改迭代顺序。HashMap


答案 2

不,不保证。一是,一是,都不能保证顺序。SetCollection

如果你想保持秩序。可能有帮助你。LinkedHashMap()entrySet()