Arten von Karte
In Java besteht die Hauptfunktion der Karte darin, Schlüsselwertpaare zu speichern. Da der Wert basierend auf dem Schlüssel erhalten wird, darf der Schlüssel nicht wiederholt werden. Es hat hauptsächlich die folgenden Kategorien:
Hashmap:
Die am häufigsten verwendete MAP speichert Daten gemäß dem HashCode -Wert des Schlüssels und kann ihren Wert direkt dem Schlüssel mit einer sehr schnellen Zugriffsgeschwindigkeit erhalten. Beim Durchlaufen ist die Reihenfolge der Datenerfassung völlig zufällig. Mit HashMap können nur ein Datensatz null sein; der Wert mehrerer Datensätze null; HashMap unterstützt keine Threadsynchronisation, dh mehrere Threads können jederzeit HashMap schreiben. Dies kann zu Inkonsistenz bei Daten führen. Wenn eine Synchronisation erforderlich ist, können Sie die synchronisierte MAP -Methode von Sammlungen verwenden, um Hashmap -synchronisiert zu machen oder Concurrenthashmap zu verwenden. Hashtable ähnelt HashMap. Es erbt aus der Wörterbuchklasse. Der Unterschied besteht darin, dass die aufgezeichneten Schlüssel oder Werte nicht leer sind. Es unterstützt die Threadsynchronisation, dh nur ein Thread kann jederzeit Hashtable schreiben, sodass beim Schreiben Hashtable auch langsamer ist.
LinkedHasMap
Die Einfügungsreihenfolge der Aufzeichnungen wird gespeichert. Beim Überqueren von LinkedHasMap mit Iterator müssen die zuerst erhaltenen Datensätze zuerst eingefügt werden. Sie können auch Parameter während der Konstruktion verwenden und nach der Anzahl der Anwendungen sortieren. Es wird beim Durchqueren langsamer als Hashmap sein, aber es gibt eine Ausnahme. Wenn HashMap eine große Kapazität hat und weniger tatsächliche Daten sind, kann es langsamer sein als LinkedHasMap, da die Durchfahrtsgeschwindigkeit von LinkedHasMap nur mit den tatsächlichen Daten zusammenhängt und nichts mit der Kapazität zu tun hat, während Hashmaps Durchlaufgeschwindigkeit mit seiner Kapazität zusammenhängt.
Treemap
Durch die Implementierung der SortMap -Schnittstelle können die von ihnen gespeicherten Datensätze nach dem Schlüssel sortiert werden. Standardmäßig ist es in aufsteigender Reihenfolge der Schlüsselwerte sortiert oder kann auch einen sortierten Komparator angeben. Wenn es mit Iterator durchquert wird, werden die erhaltenen Datensätze sortiert.
Schlüsselsortierung
Aus der obigen Einführung in die Arten von Karten können wir sehen, dass Treemap über eine eigene Schlüsselsortierfunktion verfügt. Es muss nur eine Vergleichsoberfläche gleichzeitig implementieren, um sie zu erstellen. Das Beispiel lautet wie folgt:
private static void sort_by_key () {map <Integer, Integer> TREEMAP = NEU TREEMAP <> (neuer Vergleicher <Ganzzahl> () {@Override public int Compare (Ganzzahl O1, Integer O2) {return o2-o1; // Seien Sie hier Erklären, wenn ein negativer Wert zurückgegeben wird. // Füllen Sie die Daten für (int i = 0; i <100; i ++) {int key = (int) (10000*math.random ()); int value = (int) (10000*math.random ()); TREEMAP.PUT (Schlüssel, Wert); } outmap (Treemap); } public static void outmap (map <Integer, Integer> map) {for (Integer Integer: map.keyset ()) {System.out.println ("Key ="+Integer+"value ="+map.get (Integer)); }}/* Das Ergebnis ist wie folgt: KEY = 9977 Wert = 80Key = 9684 Wert = 7108Key = 9422 Wert = 1706Key = 9264 Wert = 1210key = 9248 Wert Wert = 4758Key = 9024 Wert = 7048Key = 8892 Wert = 3124Key = 8879 Value = 6414Key = 8814Key = 8879 Value = 6414Key = 8814key = 8879 Wert = 8879 Wert = 8879 Wert Wert = 8171Key = 8728 Wert = 1538key = 8513 Wert = 4956Key = 8462 Wert = 5617Key = 8355 Wert = 8912*//Wie aus den oben genannten Erscheinen hervorgeht, ist es nicht schwierig, nach Schlüssel zu sortieren, aber es ist problematischer, die Sortierung zu platzieren, sodass Sie die Karte drehen müssen.
Nach Wert sortieren
Da MAP diese Funktion in Java nicht hat, müssen wir sie selbst implementieren. Die Idee ist wie folgt:
Die Liste in Java kann die Vergleichsschnittstelle verwenden.
Karte ist tatsächlich ein Eintrag <> Sammlung. Verwenden Sie also die Liste <Eintrag <>> Kann das Sortieren und Einfügen der sortierten Elemente in LinkedMap implementieren.
Die Code -Implementierung ist wie folgt:
private statische Karte <Integer, Integer> Sortmap (MAP <Integer, Integer> LinkedMap) {list <map.Entry <Integer, Integer >> cache = new ArrayList <> (linkedMap.Entryset ()); // Schreiben Sie die Vergleichsfunktions-Sammlungen um. }); Karte <Integer, Integer> resultMap = new LinkedHasMap <> (); // das Ergebnis in LinkedMap einfügen und für (int i = 0; i <cache.size (); i ++) {resultMap.put (cache.get (i) .GetKey (), cache.get (i) .getValue ()) einfügen; } return resultMap; }/*Ergebnis: 7965 99661067 99631720 98333257 97383934 9578777 93481924 93153472 92703649 91145892 9078*////////////Auf diese Weise kann sowohl Sortieren nach Wert als auch Sortierung nach Schlüssel erreicht werden.