14

对于像这样的地图:

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

4

3 回答 3

17

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

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

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

由于您询问HashMap,还请注意,由于地图被重新散列,对地图的任何更改都可能会更改迭代顺序。

于 2012-09-05T17:48:07.457 回答
7

不,不保证。一是Set一是Collection,都不保证顺序。

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

于 2012-09-05T17:48:18.813 回答
-1

是的。有点。您可以使用SortedMap的子类,即TreeMap。这将使密钥保持自然顺序。(或者你可以给它一个特定的比较器)。但是当您使用树形图时,您必须确保 compareTo 方法“必须与 equals 一致”。阅读 javadocs 了解更多详情。但简而言之,是的,您可以对地图进行排序。

于 2012-09-05T18:07:00.680 回答