LinkedHashMap と PriorityQueue は Java の 2 つの異なるコレクション クラスであり、さまざまなシナリオや目的に使用されます。それらの違いについては、以下で詳しく説明します。
1.リンクされたハッシュマップ
特徴:
(1). Ordered (Ordered)
LinkedHashMap は、順序付けされた Map 実装です。これは、キーと値のペアの挿入順序を維持します。つまり、LinkedHashMap を走査するとき、要素の順序は挿入順序と同じになります。
(2). 基礎となるデータ構造
LinkedHashMap は、ハッシュ テーブルと二重リンク リストを使用して実装されており、挿入順序の維持が非常に効率的になります。
(3). キーの繰り返し値
LinkedHashMap ではキーの繰り返しを許可しますが、キーの一意性は、equals メソッドと hashCode メソッドに基づいています。
該当するシーン:
LinkedHashMap は、Map の要素を挿入順に走査する必要がある場合に適しています。
使用例:
LinkedHashMap<String, Integer> linkedHashMap = new LinkedHashMap<>();
linkedHashMap.put("one", 1);
linkedHashMap.put("two", 2);
linkedHashMap.put("three", 3);
for (Map.Entry<String, Integer> entry : linkedHashMap.entrySet()) {
System.out.println(entry.getKey() + ": " + entry.getValue());
}
// 输出结果与插入顺序相同:one: 1, two: 2, three: 3
2. 優先キュー
特徴:
(1). Unordered (Unowned)
PriorityQueue は、要素の挿入順序を維持せず、優先度に従って要素を並べ替える優先キューです。
(2). 基礎となるデータ構造
通常の状況では、PriorityQueue は基礎となるデータ構造としてバイナリ ヒープ (Binary Heap) を使用しますが、これは必ずしも固定されているわけではありません。バイナリヒープを利用することで、優先度の高い要素を素早く取り出すことができます。
(3). 一意性
PriorityQueue では要素の重複は許可されません。その一意性は、要素の CompareTo メソッド (コンパレータが指定されていない場合) に基づいて、またはカスタム コンパレータを通じて実現されます。
該当するシーン:
PriorityQueue は、要素を特定のルール (優先度など) に従って処理する必要がある場合に非常に便利なデータ構造です。一般的なアプリケーションには、タスクのスケジューリング、最小ヒープと最大ヒープの実装などが含まれます。
使用例:
PriorityQueue<Integer> priorityQueue = new PriorityQueue<>();
priorityQueue.add(3);
priorityQueue.add(1);
priorityQueue.add(2);
while (!priorityQueue.isEmpty()) {
System.out.println(priorityQueue.poll()); // 输出结果为升序:1, 2, 3
}
概要:
LinkedHashMap は、挿入順序を維持する必要があり、順序付けされるシナリオに適しています。
·PriorityQueue は、順序付けされておらず、何らかのルールに従って要素を並べ替える必要があるシーンに適しています。
適切なコレクション クラスの選択は、挿入順序を維持する必要があるか、優先度に従って要素を処理する必要があるかなど、ニーズによって異なります。