JavaがMapオブジェクトを巡回する4つの方法

3690 ワード

Javaでmapを巡る具体的な4つの方法については、以下を見て詳しく説明しましょう.
方法1これは最も一般的であり、多くの場合、最も望ましい遍歴方法でもある.キー値が必要な場合に使用します.
1 2 3 4 Map map = new   HashMap(); for   (Map.Entry entry : map.entrySet()) {    System.out.println( "Key = "   + entry.getKey() + ", Value = "   + entry.getValue()); }
方法2はfor−eachサイクルでkeysまたはvaluesを遍歴する.
mapのキーまたは値のみが必要な場合は、entrySetではなくkeySetまたはvaluesでループを実現できます.
1 2 3 4 5 6 7 8 9 Map map = new   HashMap(); // map for   (Integer key : map.keySet()) {    System.out.println( "Key = "   + key); } // map for   (Integer value : map.values()) {    System.out.println( "Value = "   + value); }
この方法はentrySet遍歴よりも性能がやや良く(10%速く)、コードがよりきれいである.
メソッド3 Iteratorを使用して巡回
汎用型の使用:
1 2 3 4 5 6 Map map = new   HashMap(); Iterator> entries = map.entrySet().iterator(); while   (entries.hasNext()) {    Map.Entry entry = entries.next();    System.out.println( "Key = "   + entry.getKey() + ", Value = "   + entry.getValue()); }
汎用型を使用しない:
1 2 3 4 5 6 7 8 Map map = new   HashMap(); Iterator entries = map.entrySet().iterator(); while   (entries.hasNext()) {    Map.Entry entry = (Map.Entry) entries.next();    Integer key = (Integer)entry.getKey();    Integer value = (Integer)entry.getValue();    System.out.println( "Key = "   + key + ", Value = "   + value); }
keySetやvaluesにも同様の方法を適用することができます.
この方法は冗長に見えるが、利点がある.まず、古いバージョンjavaではmapを巡る唯一の方法です.もう1つの利点は、iterator.remove()を呼び出してentriesを削除できることです.他の2つの方法ではできません.Javadocの説明によれば、for-eachループでこの方法を使用しようとすると、結果は予測できません.
性能の面から見ると,この方法はfor−each遍歴(すなわち方法2)の性能に類する.
方法四、キーで値を探して遍歴する(効率が低い)
1 2 3 4 Map map = new   HashMap(); for   (Integer key : map.keySet()) {    Integer value = map.get(key);    System.out.println( "Key = "   + key + ", Value = "   + value);
方法1の代わりに、このコードはもっときれいに見えます.しかし、実際にはかなり遅く、非効率です.キーから値をとるのは時間のかかる操作であるため(方法1と比較して,異なるMap実装ではこの方法は20%~200%遅い).FindBugsがインストールされている場合は、低効率な遍歴について確認し、警告します.だからできるだけ使わないでください.
まとめ
キー(keys)または値(values)のみが必要な場合は、メソッド2を使用します.Java 5より言語バージョンが低い場合、またはentriesを遍歴的に削除する場合は、方法3を使用する必要があります.そうでなければ、使用方法1(キー値はすべて必要です).
 
転載:http://www.jb51.net/article/74089.htm