Java でマップを移動する 4 つの具体的な方法については、以下の詳細な説明を参照してください。
方法 1 これは最も一般的で、ほとんどの場合、最も望ましい横断方法です。キーと値の両方が必要な場合に使用されます。
Map<Integer, Integer> map = new HashMap<Integer, Integer>(); for (Map.Entry<Integer, Integer> エントリ : map.entrySet()) { System.out.println("Key = " + エントリ。 getKey() + ", Value = " +entry.getValue()); }
方法 2 は、for-each ループでキーまたは値を走査します。
マップ内のキーまたは値のみが必要な場合は、entrySet を使用する代わりに keySet または値をトラバースできます。
Map<Integer, Integer> map = new HashMap<Integer, Integer>(); //マップ内のキーを走査 for (Integer key : map.keySet()) { System.out.println("Key = " + key ) ; } // マップ内の値を走査します (Integer value : map.values()) { System.out.println("Value = " + value);
このメソッドは、entrySet トラバーサルよりもわずかにパフォーマンスが良く (10% 高速)、コードはよりクリーンです。
方法 3 では、Iterator を使用してトラバースします。
ジェネリックを使用します。
Map<Integer, Integer> マップ = new HashMap<Integer, Integer>(); Iterator<Map.Entry<Integer, Integer>> エントリ = map.entrySet().iterator(); while (entries.hasNext()) Map.Entry<Integer, Integer> エントリ = events.next(); System.out.println("Key = " +entry.getKey() + ", 値 = " + エントリ.getValue());
ジェネリックスを使用しない場合:
マップマップ = new HashMap(); 反復子エントリ = map.entrySet().iterator(); while (entries.hasNext()) { Map.Entry エントリ = (Map.Entry) 整数キー = ( Integer)entry.getKey(); 整数値 = (Integer)entry.getValue(); System.out.println("Key = " + key + ", Value = " + 値); }
同じアプローチを keySet と値に適用することもできます。
このアプローチは冗長に見えますが、利点もあります。まず第一に、これは古いバージョンの Java でマップを横断する唯一の方法です。もう 1 つの利点は、他の 2 つのメソッドでは実行できない、トラバース中に iterator.remove() を呼び出してエントリを削除できることです。 Javadoc によると、このメソッドを for-each 走査で使用しようとすると、結果は予測できません。
パフォーマンスの観点から見ると、この方法は for-each トラバーサル (つまり、方法 2) のパフォーマンスと似ています。
方法 4: キーで値を見つけてトラバースする (効率が悪い)
Map<Integer, Integer> map = new HashMap<Integer, Integer>(); for (Integer key : map.keySet()) { Integer value = map.get(key); + キー + "、値 = " + 値);
方法 1 の代替として、このコードはきれいに見えますが、実際には非常に遅く非効率です。キーから値を取得するのは時間のかかる操作であるためです (方法 1 と比較して、この方法はさまざまな Map 実装で 20% ~ 200% 遅くなります)。 FindBugs がインストールされている場合は、非効率なトラバーサルをチェックして警告します。したがって、使用を避けるようにしてください。
要約する
キーまたは値のみが必要な場合は、方法 2 を使用してください。使用している言語バージョンが Java 5 より前の場合、またはトラバーサル中にエントリを削除する予定がある場合は、方法 3 を使用する必要があります。それ以外の場合は、方法 1 (キーと値の両方) を使用します。