Der Unterschied zwischen Hashmap, Linkedhashmap und Treemap

sag es vorne

Die meisten Blogs im Internet sind sehr detailliert, aber ich brauche den wichtigsten Unterschied zwischen den dreien: Je einfacher, desto besser. Fragen Sie ChatGPT, die Antwort ist perfekt

fragen

Was ist der Unterschied zwischen Hashmap, Linkedhashmap und Treemap?

HashMap, LinkedHashMap und TreeMap sind alle Implementierungsklassen der Map-Schnittstelle in Java. Die Unterschiede zwischen ihnen sind wie folgt:

HashMap : HashMap ist eine auf einer Hash-Tabelle basierende Implementierung, die Schlüssel-Wert-Paare zum Speichern von Daten verwendet. Die Reihenfolge der Elemente wird nicht garantiert, da Elemente basierend auf dem Hash-Wert des Schlüssels gespeichert und abgerufen werden. In HashMap sind Schlüssel eindeutig, während Werte wiederholt werden können. Die zeitliche Komplexität der Einfüge-, Lösch- und Suchvorgänge von HashMap ist konstant (O(1)).

LinkedHashMap : LinkedHashMap erbt von HashMap und behält die Reihenfolge der Elemente durch eine doppelt verknüpfte Liste auf Basis von HashMap bei. Es behält die Einfügereihenfolge oder die zuletzt aufgerufene Reihenfolge bei (bestimmt durch Konstruktorparameter). Daher werden Elemente beim Durchlaufen von LinkedHashMap in der Einfügungsreihenfolge oder Zugriffsreihenfolge zurückgegeben. Die zeitliche Komplexität der Einfüge-, Lösch- und Suchvorgänge von LinkedHashMap ist ebenfalls konstant (O(1)).

TreeMap : TreeMap ist eine Implementierung, die auf einem Rot-Schwarz-Baum (einem selbstausgleichenden binären Suchbaum) basiert. Es sortiert und speichert Elemente nach Schlüsseln und bietet einige sortierungsbezogene Methoden. Die Elemente in TreeMap sind geordnet und die Elemente werden beim Durchlaufen in aufsteigender Reihenfolge der Schlüssel zurückgegeben. Die zeitliche Komplexität von Einfüge-, Lösch- und Suchvorgängen ist logarithmisch (O(log n)), wobei n die Anzahl der Elemente ist.

abschließend:

HashMap bietet die höchste Leistung beim Einfügen, Löschen und Suchen, garantiert jedoch nicht die Reihenfolge der Elemente.
LinkedHashMap behält die Einfügereihenfolge oder Zugriffsreihenfolge bei und die Einfüge-, Lösch- und Suchleistung ist etwas geringer als die von HashMap.
TreeMap speichert Elemente in der sortierten Reihenfolge der Schlüssel, und die Leistung beim Einfügen, Löschen und Suchen ist relativ gering, eignet sich jedoch für Bereichssuch- und Sortiervorgänge.
Die Wahl der zu verwendenden Implementierung hängt also von Ihren Anforderungen ab. Wenn Sie schnelle Such- und Änderungsvorgänge benötigen und sich nicht um die Reihenfolge der Elemente kümmern, ist HashMap eine gute Wahl. Wenn Sie die Einfügungsreihenfolge oder Zugriffsreihenfolge beibehalten müssen, können Sie LinkedHashMap verwenden. Wenn Sie nach Schlüsselreihenfolge sortieren oder eine Bereichssuche durchführen müssen, ist TreeMap die geeignete Wahl.

Frag nochmal

Ist die Durchlaufreihenfolge der Hashmap-Einfügereihenfolge?

Vor Java 8 ist die Durchlaufreihenfolge von HashMap unbestimmt und die Einfügereihenfolge ist nicht garantiert. Dies liegt daran, dass HashMap mithilfe einer Hash-Tabelle implementiert wird, wobei die Reihenfolge, in der Elemente gespeichert und abgerufen werden, mit dem Hash-Wert des Schlüssels zusammenhängt.

Allerdings wurde HashMap in Java 8 geändert, um seine Leistung zu verbessern, und ein neuer Konstruktor HashMap(int initialCapacity, float loadFactor, boolean accessOrder) wird bereitgestellt. Eine nach Zugriffsreihenfolge sortierte LinkedHashMap kann erstellt werden, indem der Parameter accessOrder auf true gesetzt wird.

Wenn Sie die Durchlaufreihenfolge mit der Einfügereihenfolge konsistent halten müssen, können Sie LinkedHashMap verwenden. Es verwaltet eine doppelt verknüpfte Liste, um die Einfügungsreihenfolge oder Zugriffsreihenfolge von Elementen beizubehalten. In LinkedHashMap werden Elemente beim Durchlaufen in der Einfügereihenfolge oder Zugriffsreihenfolge zurückgegeben, je nachdem, welchen Konstruktor Sie zum Erstellen des Objekts verwenden.

Der Beispielcode lautet wie folgt:

import java.util.LinkedHashMap;
import java.util.Map;

public class Main {
    
    
    public static void main(String[] args) {
    
    
        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());
        }
    }
}

Die Ausgabe erfolgt in der Einfügereihenfolge:

one : 1
two : 2
three : 3

Es ist zu beachten, dass LinkedHashMap mehr Speicher beansprucht als HashMap, da zur Aufrechterhaltung der Reihenfolge eine zusätzliche verknüpfte Listenstruktur verwaltet werden muss.

Supongo que te gusta

Origin blog.csdn.net/qq_50209297/article/details/131177032
Recomendado
Clasificación