Überblick über Java-Sammlungen
Eine Sammlung kann als Container zum Speichern von Objektinformationen angesehen werden. Alle Sammlungsklassen befinden sich im java.util-Paket, aber die Sammlungsklassen, die Multithreading unterstützen, befinden sich im java.util.concurrent-Paket.
Die Collection-Klasse von Java wird hauptsächlich von zwei Root-Schnittstellen abgeleitet, nämlich Collection und Map.
Collection-Klassen in Java können in zwei Kategorien unterteilt werden: Die eine implementiert das Collection-Interface , die andere implementiert das Map-Interface
Collection ist eine grundlegende Sammlungsschnittstelle, die eine Reihe von Sammlungselementen (Element) aufnehmen kann.
Map erbt die Collection-Schnittstelle nicht und befindet sich in einer parallelen Beziehung zu Collection. Map stellt eine Zuordnung von Schlüssel zu Wert bereit. Eine Zuordnung kann nicht denselben Schlüssel enthalten, und jeder Schlüssel kann nur einem Wert zugeordnet werden.
1. Sammlung
1. Unterschnittstellen und Implementierungsklassen der Collection-Schnittstelle
Die Unterschnittstellen der Collection - Schnittstelle umfassen: Set- Schnittstelle und List- Schnittstelle
Die Implementierungsklassen der Set-Schnittstelle umfassen hauptsächlich: HashSet , TreeSet , LinkedHashSet , etc.
Die Implementierungsklassen der List-Schnittstelle umfassen hauptsächlich: ArrayList , LinkedList , Stack und Vector , etc.
Die Liste stellt eine geordnete Sammlung dar. Jedes Element in der Liste hat einen Index. Mit dieser Schnittstelle kann die Einfügeposition jedes Elements genau gesteuert werden. Benutzer können auch den Index verwenden, um auf die Elemente in der Liste zuzugreifen, die dem Array von Java ähnelt.
Die Eigenschaft der Set-Schnittstelle besteht darin, dass sie keine doppelten Elemente enthalten kann. Für zwei beliebige Elemente element1 und element2 in Set ist elementl.equals(element2) = false. Außerdem hat Set höchstens ein Nullelement. Diese Schnittstelle ahmt das mathematische Konzept von Mengen nach.
Die unterste Schicht von ArrayList ist ein Array
Die unterste Ebene von LinkedList ist eine doppelt verknüpfte Liste
Die unterste Schicht von LinkedHashSet ist LinkedHashMap
Die unterste Schicht von HashSet ist HashMap
Die unterste Ebene von TreeSet ist TreeMap
Ob die Speicherelemente bestellt sind | Ob das Speicherelement wiederholbar ist | |
---|---|---|
Liste (Liste) | ordentlich | wiederholbar |
Warteschlange | ordentlich | wiederholbar |
einstellen (einstellen) | außer Betrieb | nicht wiederholbar |
Die Sammlung ist eine einspaltige Sammlung : Jedes Element ist ein separates Individuum
Die folgende Abbildung ist aus dem Machtknoten zitiert - Mr. Du
1. Listensammlung
(1)ArrayList
Die zugrunde liegende Datenstruktur ist ein Array;
Schnelle Abfrage, langsames Hinzufügen und Löschen
Thread unsicher, hohe Effizienz.
(2)Verknüpfte Liste
Die zugrunde liegende Datenstruktur ist eine verkettete Liste
Die Abfrage ist langsam und das Hinzufügen und Löschen geht schnell.
Thread unsicher, hohe Effizienz.
(3) Vektor
Die zugrunde liegende Datenstruktur ist ein Array,
Schnelle Abfrage, langsames Hinzufügen und Löschen.
Fadensicher, geringer Wirkungsgrad.
(4) Stapeln
Es ist die Implementierungsklasse von Vector, die einen Last-in-First-out-Stack implementiert.
Stack bietet fünf zusätzliche Methoden, mit denen Vector als Stack verwendet werden kann. Die Push- und Pop-Methode sowie die Peek-Methode holen sich die Elemente des Stacks, die Empty-Methode testet, ob der Stack leer ist, und die Search-Methode prüft die Position eines Elements im Stack. Ein Stack ist ein leerer Stack, direkt nachdem er erstellt wurde.
2. Warteschlangensammlung
Eine Warteschlange ist eine spezielle lineare Tabelle, die nur Löschungen am vorderen Ende der Tabelle und Einfügungen am hinteren Ende der Tabelle zulässt.
Die Deque-Klasse ist die Implementierungsklasse von Queue. Die LinkedList-Klasse implementiert sowohl die List-Schnittstelle als auch die Deque-Schnittstelle (implementiert auch die Queue-Schnittstelle). Die Queue-Schnittstelle schränkt den Zugriff auf LinkedList-Methoden ein, das heißt, wenn der Parametertyp in der Methode Queue ist, kann sie nur auf die von der Queue-Schnittstelle definierten Methoden zugreifen, aber nicht direkt auf die Nicht-Queue-Methoden von LinkedList. damit nur die passende Methode verwendet werden kann.
3. Sammlung einstellen
(1) HashSet-Klasse
Die zugrunde liegende Datenstruktur ist eine Hash-Tabelle.
Die Zugriffs- und Suchleistung ist gut.
Der Wert des Sammlungselements kann null sein
(2) LinkedHashSet
Es ist eine Unterklasse von HashSet und hat die Eigenschaften von HashSet.
Die zugrunde liegende Datenstruktur ist eine verkettete Liste und eine Hash-Tabelle.Die verkettete Liste behält die Reihenfolge der Elemente bei, und die Reihenfolgeder Elemente stimmt mit der Reihenfolge überein, in der sie hinzugefügt wurden. Die Eindeutigkeit der Elemente wird durch die Hash-Tabelle garantiert.
(3)TreeSet
Die zugrunde liegende Datenstruktur ist ein binärer Baum, der die Implementierungsklasse der SortedSet-Schnittstelle darstellt, die sicherstellen kann, dass sich die Elemente in einem sortierten Zustand befinden.
TreeSet unterstützt zwei Arten der Elementsortierung: natürliche Sortierung und benutzerdefinierte Objektsortierung.
2. Karte
Die Implementierungsklassen der Map-Schnittstelle umfassen hauptsächlich: HashMap, TreeMap , Hashtable , ConcurrentHashMap und Properties usw.
Die Map-Schnittstelle verwendet die Schlüssel-Wert-Paar-Speichermethode Map<k,v>, um Daten mit einer Zuordnungsbeziehung zu speichern. Daher speichert die Map-Sammlung zwei
Gruppenwert, eine Gruppe von Werten wird verwendet, um den Schlüssel in der Map zu speichern, und eine andere Gruppe von Werten wird verwendet, um den Wert in der Map zu speichern, Schlüssel und Wert können sein
Es ist jede Art von Daten, der Schlüsselwert erlaubt keine Duplizierung und kann null sein. Wenn beim Hinzufügen von Schlüssel-Wert-Paaren bereits Duplikate in der Map vorhanden sind
drücken, überschreibt der neu hinzugefügte Wert den ursprünglichen entsprechenden Wert
Das zugrunde liegende Prinzip von HashMap ist das gleiche wie das von HashTable: Wenn die Hash-Kollision an derselben Position größer als 8 ist, wird die verknüpfte Liste nach der Version Java 8 zu einem rot-schwarzen Baum
Die unterste Schicht von HashTable ist eine Hash-Tabelle, die aus einer Kettenadressmethode besteht (d. h. Array + verkettete Liste mit einem Element).
Die untere Ebene von LinkedHashMap wird von HashMap modifiziert, das eine doppelt verknüpfte Liste enthält, die die Einfügungsreihenfolge beibehält
Die unterste Schicht von TreeMap ist ein rot-schwarzer Baum
Map ist eine zweispaltige Sammlung : Jedes Element ist ein Datenpaar, und das Datenpaar wird als Ganzes behandelt, um zu funktionieren
Die folgende Abbildung ist aus dem Machtknoten zitiert - Mr. Du
1, HashTable, HashMap
HashMap und HashTable sind zwei typische Implementierungen der Map-Schnittstelle, und die Beziehung zwischen ihnen ist völlig ähnlich wie ArrayList und Vertor. HashTable ist eine alte Map-Implementierungsklasse, deren Methoden umständlich sind und derzeit im Grunde nicht verwendet werden.
HashMap-Thread ist nicht sicher, HashTable-Thread sicher.
HashMap ist normalerweise schneller als HashTable
Der Schlüssel und der Wert von HashMap können Nullwerte sein. HashTable erlaubt keine Verwendung von Null-Werten als Schlüssel und Wert. Wenn Null in HashTable eingefügt wird, tritt eine Nullzeiger-Ausnahme auf.
2. LinkedHashMap-Klasse
LinkedHashMap verwendet eine doppelt verknüpfte Liste, um die Reihenfolge der Schlüssel-Wert-Paare beizubehalten (tatsächlich muss nur die Reihenfolge der Schlüssel berücksichtigt werden). Reihenfolge, sodass die Leistung geringer ist als die von HashMap, aber der iterative Zugriff auf die Elemente in den Map All-Elementen hat eine bessere Leistung.
3. Eigenschaftsklasse
Die Properties-Klasse ist eine Unterklasse der Hashtable-Klasse, die einer Map entspricht, deren Schlüssel und Wert beide String-Typen sind, und hauptsächlich zum Lesen von Konfigurationsdateien verwendet wird.
4. TreeMap-Klasse
TreeMap ist die Implementierungsklasse von SortedMap, einer binären Baumdatenstruktur, und jedes Schlüssel-Wert-Paar wird als Knoten des binären Baums verwendet. Wenn TreeMap Schlüssel-Wert-Paare speichert, muss es die Knoten nach dem Schlüssel sortieren. TreeMap hat auch zwei Sortiermethoden:
Natürliche Sortierung: Alle Schlüssel der TreeMap müssen die Comparable-Schnittstelle implementieren, und alle Schlüssel sollten Objekte derselben Klasse sein, sonst wird eine ClassCastException geworfen.
Benutzerdefiniertes Objekt Benutzerdefinierte Sortierung: Beim Erstellen einer TreeMap wird ein Comparator-Objekt übergeben, das für die Sortierung aller Schlüssel in der TreeMap verantwortlich ist.