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]</string></string></string>
ハッシュテーブル: レガシー データ構造
Java 1.2 より前は、ハッシュテーブルが普及していましたが、より洗練されたものになったため、現在は非推奨になっています。 HashMaps によって提供される機能。ハッシュテーブルは HashMaps と同様の動作を示しますが、
- 同期されているため、マルチスレッド環境のパフォーマンスに影響を与える可能性があります。
- Map の代わりに従来の Dictionary インターフェイスを実装します。
- 要素にアクセスするときは、明示的な型キャストが必要です。
以上がJava の HashMap、LinkedHashMap、および TreeMap: 主な違いとそれぞれをいつ使用するか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。
声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事
R.E.P.O.説明されたエネルギー結晶と彼らが何をするか(黄色のクリスタル)
1 か月前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最高のグラフィック設定
1 か月前By尊渡假赌尊渡假赌尊渡假赌
アサシンのクリードシャドウズ:シーシェルリドルソリューション
3週間前ByDDD
Will R.E.P.O.クロスプレイがありますか?
1 か月前By尊渡假赌尊渡假赌尊渡假赌

ホットツール

PhpStorm Mac バージョン
最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール

SublimeText3 Linux 新バージョン
SublimeText3 Linux 最新バージョン

VSCode Windows 64 ビットのダウンロード
Microsoft によって発売された無料で強力な IDE エディター

ZendStudio 13.5.1 Mac
強力な PHP 統合開発環境

メモ帳++7.3.1
使いやすく無料のコードエディター
