私はlinkedHashMapを使用して、誰かがアクセスしようとしたときの順序を保証しています。ただし、それを繰り返すときは、entrySet()を使用してキーと値のペアを返すことで順序も保証されますか?反復中は変更は行われません。
編集:また、キーを繰り返し処理してgetを呼び出すことにより、マップを繰り返し処理することによる悪影響はありますか?
私はlinkedHashMapを使用して、誰かがアクセスしようとしたときの順序を保証しています。ただし、それを繰り返すときは、entrySet()を使用してキーと値のペアを返すことで順序も保証されますか?反復中は変更は行われません。
編集:また、キーを繰り返し処理してgetを呼び出すことにより、マップを繰り返し処理することによる悪影響はありますか?
Javadocsによると、はい。
HashMap
この実装は、すべてのエントリを実行する二重リンク リストを維持するという点でとは異なります。この連結リストは反復順序を定義します。これは通常、キーがマップに挿入された順序 ( insert-order ) です。
編集に関しては、いいえ、問題なく動作するはずです。ただし、反復中にマップ内のすべてのキーを検索するオーバーヘッドが回避されるため、エントリ セットの方が多少高速です。
反復中に変更が行われないことが確実な場合は、 APIentrySet()
に記載されているように、 での適切な順序付けが保証されます。
この連結リストは反復順序を定義します。これは通常、キーがマップに挿入された順序 (挿入順序) です。キーがマップに再挿入されても、挿入順序は影響を受けないことに注意してください。(呼び出しの直前に m.containsKey(k) が true を返すときに m.put(k, v) が呼び出された場合、キー k はマップ m に再挿入されます。)