Was ist der Unterschied zwischen LinkedHashMap und PriorityQueue in Java?

LinkedHashMap und PriorityQueue sind zwei verschiedene Sammlungsklassen in Java, die für unterschiedliche Szenarien und Zwecke verwendet werden. Die Unterschiede zwischen ihnen werden im Folgenden detailliert beschrieben:

1. LinkedHashMap

Merkmale:

(1) Ordered (Ordered)
  
  LinkedHashMap ist eine geordnete Map-Implementierung. Es behält die Einfügereihenfolge der Schlüssel-Wert-Paare bei, was bedeutet, dass beim Durchlaufen der LinkedHashMap die Reihenfolge der Elemente mit der Einfügereihenfolge übereinstimmt.

(2) Die zugrunde liegende Datenstruktur
  
  LinkedHashMap wird mithilfe einer Hash-Tabelle und einer doppelt verknüpften Liste implementiert, wodurch die Einfügereihenfolge sehr effizient beibehalten werden kann.

(3) Wiederholter Schlüsselwert
  
  LinkedHashMap ermöglicht wiederholte Schlüssel, aber die Eindeutigkeit des Schlüssels basiert auf der Methode equal und der Methode hashCode.

Anwendbare Szene:

LinkedHashMap ist eine gute Wahl, wenn Sie die Elemente der Map in der Reihenfolge ihrer Einfügung durchlaufen müssen.

Beispielverwendung:

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. Prioritätswarteschlange

Merkmale:

(1) Ungeordnete (ungeordnete)
  
  PriorityQueue ist eine Prioritätswarteschlange, die die Einfügereihenfolge der Elemente nicht beibehält, sondern sie nach ihrer Priorität sortiert.

(2) Zugrunde liegende Datenstruktur
  
  Unter normalen Umständen verwendet PriorityQueue einen binären Heap (Binary Heap) als zugrunde liegende Datenstruktur, dies ist jedoch nicht unbedingt festgelegt. Der binäre Heap ermöglicht das schnelle Entfernen der Elemente mit der höchsten Priorität.

(3). Eindeutigkeit
  
  PriorityQueue lässt keine doppelten Elemente zu. Seine Einzigartigkeit wird basierend auf der CompareTo-Methode des Elements (wenn kein Komparator angegeben ist) oder durch einen benutzerdefinierten Komparator erreicht.

Anwendbare Szene:

PriorityQueue ist eine sehr nützliche Datenstruktur, wenn Elemente nach bestimmten Regeln (z. B. Priorität) verarbeitet werden müssen. Zu den gängigen Anwendungen gehören die Aufgabenplanung, die Implementierung von Min-Heap und Max-Heap usw.

Beispielverwendung:

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
}

Zusammenfassung:
LinkedHashMap eignet sich für Szenarien, in denen die Einfügungsreihenfolge beibehalten werden muss und geordnet ist.

·PriorityQueue eignet sich für Szenen, in denen Elemente nach bestimmten Regeln sortiert werden müssen. Sie ist ungeordnet.

Die Auswahl der richtigen Sammlungsklasse hängt von unseren Anforderungen ab, ob wir die Einfügungsreihenfolge beibehalten oder Elemente nach Priorität verarbeiten müssen.

Supongo que te gusta

Origin blog.csdn.net/cz_00001/article/details/132566436
Recomendado
Clasificación