ジャワの地図を通過する5つの方法を[予約]


免責事項:この記事は、記事を転載され、複製時に変更され、十分なを持って、元のソースのリンクを添付して、この文を再度再生してください。
著者: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)あなたは横断プロセスの要素を追加する必要がある場合は、新しい一時的な地図の記憶素子を作成することができ、トラバースの終了後、元の暫定地図マップに追加。

著作権

侵害、ブロガー、確かにすぐに削除を連絡してください場合は、この記事では、元の作者に属します。

転載するには、記事ページの見かけ上の位置にある元のリンク、または他の自分の責任を明記してください。

おすすめ

転載: www.cnblogs.com/shoufeng/p/11774640.html