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

dac*_*cwe 13 java collections

对于像这样的地图:

Map<Integer, Integer> map = ...;
map.put(1, 1);
map.put(2, 2);
map.put(3, 3);
map.put(4, 4);
Run Code Online (Sandbox Code Playgroud)

这个代码是......

for (Integer i : map.keySet()) System.out.println(i);
for (Integer i : map.values()) System.out.println(i);
Run Code Online (Sandbox Code Playgroud)

...保证两次打印相同的序列?

如果没有,例如有任何保证java.util.HashMap吗?

par*_*fal 17

不,没有保证,虽然在实践中它会发生(没有充分的理由让地图为键和值使用不同的迭代器).

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

for (Map.Entry<Integer,Integer> entry : map.entrySet())
    // ...
Run Code Online (Sandbox Code Playgroud)

既然你问了一下HashMap,请注意,由于mapbeing重新定义,对地图的任何更改都可能会改变迭代顺序.


kos*_*osa 7

不,不保证.一个是Set一个Collection,既不保证订单.

如果您想保留订单.可能LinkedHashMap()entrySet()帮助你.