ホームページ >Java >&#&チュートリアル >Java の HashMap、LinkedHashMap、および TreeMap: 主な違いとそれぞれをいつ使用するか?

Java の HashMap、LinkedHashMap、および TreeMap: 主な違いとそれぞれをいつ使用するか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-12-22 22:39:16659ブラウズ

HashMap, LinkedHashMap, and TreeMap in Java: What are the Key Differences and When to Use Each?

Java での HashMap、LinkedHashMap、および TreeMap のニュアンスの移動

イントロ

としてJava 開発者にとって、さまざまなものの違いを理解することは非常に重要です。データ構造には、HashMap、LinkedHashMap、TreeMap の 3 つの一般的なオプションが含まれます。これらはすべて Map インターフェイスを実装していますが、機能とパフォーマンスに影響を与える独自の特性を示します。

主要な相違点

  • 反復順序: HashMap は反復順序を保証しませんが、LinkedHashMap は挿入順序を維持し、TreeMap はキーに基づいて反復しますsort.
  • 複雑さ: HashMap は get/put/remove/containsKey 操作に対して O(1) の複雑さを提供しますが、TreeMap はソートされた性質により O(log(n)) で動作します。
  • Null 値/キー: ハッシュマップとLinkedHashMap は null 値とキーの両方を許可しますが、TreeMap は非 null 値のみを許可します。
  • フェイルファスト動作: フェイルファスト プロパティは、次の理由により、これらのデータ構造のいずれに対しても保証されません。同時変更の可能性。

基礎となる実装と同期:

  • HashMap はデータ ストレージにバケット メカニズムを利用しますが、LinkedHashMap は挿入順序を維持するために二重リンク バケットを採用します。 TreeMap は、並べ替えられたストレージ用の Red-Black Tree を使用して実装されます。
  • これらのデータ構造はいずれも本質的に同期されないため、同時アクセス制御のために明示的な同期が必要です。

使用例出力:

提供されたコード スニペットは、 HashMap、LinkedHashMap、および TreeMap:

// HashMap (unsorted key order)
Map<String, String> m1 = new HashMap<>();
m1.put("map", "HashMap");
m1.put("schildt", "java2");
m1.put("mathew", "Hyden");
m1.put("schildt", "java2s");
System.out.println(m1.keySet());  // [schildt, mathew, map]
System.out.println(m1.values()); // [java2s, Hyden, HashMap]

// TreeMap (sorted key order)
SortedMap<String, String> sm = new TreeMap<>();
sm.put("map", "TreeMap");
sm.put("schildt", "java2");
sm.put("mathew", "Hyden");
sm.put("schildt", "java2s");
System.out.println(sm.keySet());  // [map, mathew, schildt]
System.out.println(sm.values()); // [TreeMap, Hyden, java2s]

// LinkedHashMap (insertion order)
LinkedHashMap<String, String> lm = new LinkedHashMap<>();
lm.put("map", "LinkedHashMap");
lm.put("schildt", "java2");
lm.put("mathew", "Hyden");
lm.put("schildt", "java2s");
System.out.println(lm.keySet());  // [map, schildt, mathew]
System.out.println(lm.values()); // [LinkedHashMap, java2, Hyden]

ハッシュテーブル: レガシー データ構造

Java 1.2 より前は、ハッシュテーブルが普及していましたが、より洗練されたものになったため、現在は非推奨になっています。 HashMaps によって提供される機能。ハッシュテーブルは HashMaps と同様の動作を示しますが、

  • 同期されているため、マルチスレッド環境のパフォーマンスに影響を与える可能性があります。
  • Map の代わりに従来の Dictionary インターフェイスを実装します。
  • 要素にアクセスするときは、明示的な型キャストが必要です。

以上がJava の HashMap、LinkedHashMap、および TreeMap: 主な違いとそれぞれをいつ使用するか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。