ディレクトリ
免責事項:この記事は、記事を転載され、複製時に変更され、十分なを持って、元のソースのリンクを添付して、この文を再度再生してください。
著者:zhaoguhong(趙区香港)
出典:http://www.cnblogs.com/zhaoguhong
地図Javaは、最も初期のイテレータイテレータから、トラバースする方法はいくつかありますが、拡張forループJDK 5をサポートするために始めた - 私たちは具体的な使用方法を見てみましょう、というのforeachをした後、ラムダにJDK 8を表現し、その利点と欠点。
1のkeySet()または値()メソッドを横断
あなただけの地図を通じて、マップのキーまたは値を取得する必要がある場合keySet()
やvalues()
方法は、間違いなく最も便利です。
public class TestMap {
/**
* Map 的扩容比较消耗性能, 因此若能确定存储数据的大小,
* 在初始化时指定初始容量是一个不错的实践技巧
*/
private static Map<Integer, Integer> map = new HashMap<>(16);
/** keySet 获取 key */
public void testKeySet() {
for (Integer key : map.keySet()) {
System.out.println(key);
}
}
/** values 获取 value */
public void testValues() {
for (Integer value : map.values()) {
System.out.println(value);
}
}
}
2のkeySetは、get(キー)の値を取得します
あなたは、キーと値を取得する必要がある場合は、最初のキーを通り、その後の地図を介して取得することができget(key)
、対応する値を取得します。
注:この方法が最適ではない、それは一般的に推奨されていません。
/** keySet get(key) 获取key and value */
public void testKeySetAndGetKey() {
for (Integer key : map.keySet()) {
System.out.println(key + ":" + map.get(key));
}
}
3のentrySetによって横断
トラバースの地図のentrySetことで、あなたはまた、同時にキーと値を取得することができます。
最も一般的に使用される方法は、多くの場合、パフォーマンスは第二のタイプよりも優れている、方法マップトラバースです。
/**
* entrySet 获取 key 和 value, Entry 是 Map 内部存储数据的逻辑容器
*/
public void testEntry() {
for (Map.Entry<Integer, Integer> entry : map.entrySet()) {
System.out.println(entry.getKey() + ":" + entry.getValue());
}
}
イテレータイテレータを介して4トラバース
上記で使用されるいくつかのトラバーサル方法が拡張forループされている - のforeach、これはJDK 5機能の始まりに過ぎません。
foreach
それは非常に簡単な操作を見えますが、一つの欠点はありますが:地図を横断するときに、そのサイズを変更した場合、同時変更が例外をスローしますが、あなたは地図を横断しながら、それはイテレータを使用できる要素を削除する必要がある場合にのみ、remove()
この方法を要素を削除します:
/** Iterator 获取 key 和 value */
public void testIterator() {
Iterator<Map.Entry<Integer, Integer>> it = map.entrySet().iterator();
while (it.hasNext()) {
Map.Entry<Integer, Integer> entry = it.next();
System.out.println(entry.getKey() + ":" + entry.getValue());
// 删除元素
// it.remove();
}
}
5ラムダ式によって横断
JDK 8は、ラムダのサポートを提供し、それはあなたが同時にキーと値を取得することができ、より簡潔な構文を探します。
しかし、簡単なテストの後、ラムダ式はので、より多くの地図を横断するのentrySetを推奨され、トラバース速度がのentrySetトラバース道よりも低くなっているマップ。
/** Lambda 获取key and value */
public void testLambda() {
map.forEach((key, value) -> {
System.out.println(key + ":" + value);
});
}
6まとめ - 実用的なアドバイスのトラバース地図
(1)キーまたは値の取得を推奨する場合にのみkeySet()
、またはvalues()
方法。
あなたは、キーと値を取得する必要がある場合(2)、のentrySetをお勧めします。
(3)あなたはイテレータをお勧め横断中の要素を削除する必要がある場合は、
(4)あなたは横断プロセスの要素を追加する必要がある場合は、新しい一時的な地図の記憶素子を作成することができ、トラバースの終了後、元の暫定地図マップに追加。
著作権
侵害、ブロガー、確かにすぐに削除を連絡してください場合は、この記事では、元の作者に属します。
転載するには、記事ページの見かけ上の位置にある元のリンク、または他の自分の責任を明記してください。