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