1. ホーム
  2. java

[解決済み] Java HashMapのkeySet()の繰り返し順序は一貫していますか?

2023-05-12 13:15:57

質問

MapのkeySet()メソッドから返されるSetは、特定の順序を保証するものではないと理解しています。

私の質問は、それが 同じ の順序を保証するのでしょうか? 例えば

Map<K,V> map = getMap();

for( K k : map.keySet() )
{
}

...

for( K k : map.keySet() )
{
}

上記のコードで、マップが ではなく が変更された場合、keySets の反復処理は同じ順序になるのでしょうか。 Sun の jdk15 を使用すると、それは はします。 しかし、この動作に依存する前に、すべてのJDKが同じことを行うかどうかを知りたいのです。

EDIT

回答を見ていると、あてにならないんですね。 残念です。 私は、私の順序を保証するために新しいコレクションを構築する必要がないことを期待していました。 私のコードは、繰り返し処理を行い、いくつかのロジックを実行し、同じ順序で再度繰り返し処理を行う必要がありました。 私はただ、順序を保証するキーセットから新しいArrayListを作成します。

どのように解決するのですか?

APIドキュメントに保証すると記載されていないのであれば、それに依存してはいけません。同じベンダーの JDK であっても、JDK のリリースごとに動作が変わる可能性すらあります。

セットを入手して、自分でソートすればいいだけだから簡単でしょ?