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);

...同じシーケンスを 2 回印刷することを保証しますか?

そうでない場合、たとえば保証はありますjava.util.HashMapか?

4

3 に答える 3

17

いいえ、保証はありませんが、実際には発生します (マップがキーと値に別の反復子を使用する正当な理由はありません)。

繰り返しの順序を保証したい場合は、次を繰り返しますentrySet()

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

について尋ねるのでHashMap、マップを変更すると、マップが再ハッシュされる結果として、反復順序が変わる可能性があることにも注意してください。

于 2012-09-05T17:48:07.457 に答える
7

いいえ、保証されません。1 つはSetで、もう 1 つはでありCollection、どちらも順序を保証しません。

秩序を保ちたい場合。LinkedHashMap()あなたの助けになるかもしれentrySet()ません。

于 2012-09-05T17:48:18.813 に答える
-1

はい。並べ替え。SortedMapのサブクラス、つまりTreeMapを使用できます。これにより、キーが自然な順序で保持されます。(または、特定のコンパレータを指定できます)。ただし、ツリー マップを使用する場合は、compareTo メソッドが「equals と一致している必要がある」ことを確認する必要があります。詳細については、javadoc を参照してください。しかし、要するに、はい、マップを並べ替えることができます。

于 2012-09-05T18:07:00.680 に答える