„Und endlich erzähle ich dir von Map.“

„Wie Sie wissen, speichert Map eine Reihe von Schlüssel-Wert-Paaren. Die Schlüssel müssen eindeutig sein, aber die Werte können alles sein. Wenn Sie einer Map ein Schlüssel-Wert-Paar hinzufügen und die Sammlung den Schlüssel bereits enthält, dann Der alte Wert wird durch den neuen ersetzt. Mit anderen Worten: Der Schlüssel fungiert wie ein spezieller Index, der ein beliebiges Objekt sein kann .

Karte ist ein mathematischer Begriff, der eine Menge von (x, y)-Paaren bezeichnet, in denen jedes eindeutige x einem y entspricht.

Programmierer sind von Map sehr angetan, daher stellen wir hier vier verschiedene Sammlungen vor, die die Map-Schnittstelle implementieren:

„Hier ist seine einfache Vererbungsstruktur:“

Kartenhierarchie - 1

„Das Gelb zeigt an, dass Entry eine verschachtelte Schnittstelle in der Map- Schnittstelle ist.“

„Der Eintrag wurde hinzugefügt, um ein Elementpaar als eine einzelne Einheit zu beschreiben.“

„Hier sind die Methoden von Map<K,V>:“

Methoden Beschreibung
int size() Gibt die Anzahl der Paare in der Karte zurück.
boolean isEmpty() Überprüft, ob die Karte leer ist.
boolean containsKey(Object key) Enthält die Karte den angegebenen Schlüssel?
boolean containsValue(Object value) Enthält die Karte den angegebenen Wert?
V get(Object key) Gibt den Wert für den angegebenen Schlüssel zurück.
V put(K key, V value) Legt einen neuen Wert für den Schlüssel fest.
Die Methode gibt den alten Wert oder null zurück
putAll(Map<? extends K, ? extends V> m) Fügt Paare aus einer anderen Karte hinzu.
void clear() Löscht die Karte, dh entfernt alle Paare.
Set<K>keySet() Gibt einen Satz Schlüssel zurück.
Collection<V>values() Gibt eine Sammlung von Werten zurück.
Set<Map.Entry<K, V>>entrySet() Gibt eine Menge von Paaren zurück.

„K und V sind die Typparameter für die Schlüssel und Werte.“

„Nun, ich kenne die meisten Methoden, habe aber nur mit einigen davon gearbeitet.“

„Was können Sie mir sonst noch über den Einstiegskurs erzählen?“

„Diese Klasse beschreibt ein Elementpaar. Sie verfügt über einige Methoden:“

Methoden Beschreibung
getKey() Gibt den Schlüssel des Schlüssel-Wert-Paares zurück.
getValue() Gibt den Wert des Schlüssel-Wert-Paares zurück.
setValue(V value) Legt einen neuen Wert im Schlüssel-Wert-Paar fest.

„Die Eingabe ist praktisch, da Sie ein Paar an eine Methode übergeben können, ohne die gesamte Karte übergeben zu müssen.“

"Ich verstehe."

„Jetzt werde ich die Kartenimplementierungen durchgehen.“

„An erster Stelle steht HashMap . Es verwendet Hash-Tabellen zum Speichern von Elementen. Schlüssel und Werte können von jedem Typ sein und auch Null. Die Reihenfolge der Elemente kann sich ändern, wenn sich die Sammlung ändert .“

„Elemente werden in einer HashMap als eine Reihe von Gruppen oder Buckets gespeichert. Die hashCode()-Methode eines Elements bestimmt, in welchen Bucket es fällt.“

„Ganz grob gesagt fallen Elemente mit einem Hash-Code von 1 bis 100 in den ersten Eimer, solche mit einem Wert von 101 bis 200 in den zweiten und so weiter.“

„Der Sinn der Speicherung von Elementen auf diese Weise besteht darin, dass wir beim Suchen oder Entfernen von Elementen alle Elemente in irrelevanten Buckets eliminieren können.“

"Ich verstehe."

„Es gibt einen wirklich guten Artikel über HashMap. Ich empfehle Ihnen, ihn zu lesen: https://medium.com/@mr.anmolsehgal/java-hashmap-internal-implementation-21597e1efec3

„Die zweite Sammlung ist LinkedHashMap . Der Hauptunterschied zu HashMap besteht darin, dass Elemente auch als verknüpfte Liste gespeichert werden. In einer gewöhnlichen HashMap ist die Reihenfolge der Elemente undefiniert und kann sich im Laufe der Zeit ändern. Und Sie können einen Iterator aus einer LinkedHashMap erhalten und verwenden Sie es, um alle Elemente in der Reihenfolge durchzugehen, in der sie zur LinkedHashMap hinzugefügt wurden. Darüber hinaus verfügt LinkedHashMap über einen Iterator, mit dem Sie alle Paare in der Reihenfolge der letzten Verwendung/Aktivität durchgehen können.

„Es gibt einen wirklich guten Artikel über LinkedHashMap. Bitte schön: https://medium.com/@mr.anmolsehgal/java-linkedhashmap-internal-implementation-44e2e2893036

„Die dritte Sammlung, über die ich heute sprechen möchte, ist TreeMap .“

TreeMap sortiert seine Elemente in aufsteigender Reihenfolge. Dies wird dadurch erreicht, dass TreeMap einen ausgeglichenen Rot-Schwarz-Baum zum Speichern von Elementen verwendet.“

„Dadurch sind die Einfügezeit und die Suchzeit sehr gering. Diese Klasse ist eine gute Wahl, wenn sehr große Datenmengen verwendet werden.“

„Und natürlich haben wir einen Artikel über TreeMap: https://medium.com/xebia-engineering/treemap-internals-199e0e0050b5

„Was habe ich dir noch nicht erzählt?“

„WeakHashMap, aber Rishi hat mir vor ein paar Tagen davon erzählt.“

"Wann war das?"

„Als er über SoftReference, WeakReference und PhantomReference sprach.“

„Ich glaube dir, wenn man bedenkt, dass du sie alle richtig benannt hast. Dann entspann dich. Bis heute Abend.“

„Tschüs, Ellie.“