Java の LinkedHashMap と PriorityQueue の違いは何ですか?

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 は、順序付けされておらず、何らかのルールに従って要素を並べ替える必要があるシーンに適しています。

適切なコレクション クラスの選択は、挿入順序を維持する必要があるか、優先度に従って要素を処理する必要があるかなど、ニーズによって異なります。

おすすめ

転載: blog.csdn.net/cz_00001/article/details/132566436
おすすめ