Heim >Java >javaLernprogramm >Was ist eine Sammlung? Grundlegende Einführung in Java-Sammlungen (mit Framework-Diagramm)
Der Inhalt dieses Artikels befasst sich mit der Frage: Was ist eine Sammlung? Eine grundlegende Einführung in Java-Sammlungen (mit Rahmendiagramm) hat einen gewissen Referenzwert. Ich hoffe, dass sie für Sie hilfreich ist.
Was ist eine Sammlung?
Die Java-Sammlungsklasse wird im Paket java.util gespeichert und ist ein Container zum Speichern von Objekten.
Hinweis: ① Sammlungen können nur Objekte speichern. Wenn Sie beispielsweise Daten vom Typ int 1 in einer Sammlung speichern, werden sie tatsächlich automatisch in die Integer-Klasse konvertiert und dann gespeichert. Jeder Basistyp in Java verfügt über einen entsprechenden Referenztyp.
② Sammlungen speichern Verweise auf mehrere Objekte, und die Objekte selbst werden weiterhin im Heapspeicher abgelegt.
③ Sammlungen können verschiedene Datentypen und eine unbegrenzte Anzahl von Datentypen speichern.
Grundkonzepte von Java-Collection-Klassen
Bei der Programmierung ist es oft notwendig, mehrere Daten zentral zu speichern. Traditionell sind Arrays für uns eine gute Wahl, vorausgesetzt, wir wissen im Voraus genau, wie viele Objekte wir speichern werden. Sobald die Array-Länge während der Array-Initialisierung angegeben wird, ist die Array-Länge unveränderlich. Wenn wir Daten speichern müssen, die dynamisch wachsen können (die spezifische Anzahl kann zur Kompilierungszeit nicht bestimmt werden), ist die Sammlungsklasse von Java ein gutes Design.
Sammlungsklassen sind hauptsächlich für das Speichern und Halten anderer Daten verantwortlich, daher werden Sammlungsklassen auch Containerklassen genannt. Alle Sammlungsklassen befinden sich im Paket java.util. Um Probleme mit der Parallelitätssicherheit in einer Multithread-Umgebung zu lösen, stellte Java5 später auch einige Sammlungsklassen mit Multithread-Unterstützung im Paket java.util.concurrent bereit.
Wenn wir die API- und Programmierprinzipien der Collection-Klasse in Java lernen, müssen wir verstehen, dass „Set“ ein sehr altes mathematisches Konzept ist, das lange vor der Entstehung von Java existierte. Das Verständnis von Sammlungen aus der Perspektive mathematischer Konzepte kann uns helfen, besser zu verstehen, wann welche Art von Sammlungsklasse in der Programmierung verwendet werden sollte.
Der Zweck der Java-Container-Klassenbibliothek besteht darin, „Objekte zu speichern“ und sie in zwei verschiedene Konzepte zu unterteilen:
1) Sammlung
Eine Reihe von „entgegengesetzten“ Elementen, normalerweise diese Elemente gehorchen bestimmten Regeln
1.1) Liste muss eine bestimmte Reihenfolge der Elemente beibehalten
1.2) Satz darf keine doppelten Elemente enthalten
1.3) Warteschlange behält die Reihenfolge einer Warteschlange bei (first in, first out)
2 ) Karte
Ein Satz von „Schlüssel-Wert-Paar“-Objekten
1) Sammlung kann nur ein Element (Objekt) an jeder Position speichern
2) Karte speichert „Schlüssel -Wert-Paare", wie eine kleine Datenbank. Wir können den „Wert“, der dem Schlüssel entspricht, über „Schlüssel“ finden
Hierarchische Beziehung der Java-Sammlungsklassenarchitektur
1. Schnittstelle Iterable
Iterator-Schnittstelle, die die übergeordnete Schnittstelle der Collection-Klasse ist. Objekte, die diese iterierbare Schnittstelle implementieren, ermöglichen die Durchquerung mit foreach, d. h. alle Sammlungsobjekte verfügen über „foreach-Durchquerbarkeit“. Diese iterierbare Schnittstelle verfügt nur über eine Methode: iterator(). Es gibt einen generischen
1.1 Sammlung
Eine Sammlung stellt eine Sammlung von Objekten dar, die als Elemente bezeichnet werden Sammlung. Collection ist eine Schnittstelle, die Standarddefinitionen bereitstellt und nicht instanziiert und verwendet werden kann
1) Set
Die Set-Sammlung ähnelt einem Glas. Es gibt keine offensichtliche Reihenfolge zwischen den mehreren Objekten, die in die Set-Sammlung „geworfen“ werden. Set erbt von der Collection-Schnittstelle und kann keine doppelten Elemente enthalten (denken Sie daran, dass dies eine gemeinsame Eigenschaft der gesamten Set-Klassenhierarchie ist).
Set bestimmt, dass zwei Objekte gleich sind, anstatt den Operator „==“ zu verwenden, sondern basierend auf der Methode „equals“. Das heißt, wenn wir ein neues Element hinzufügen und der Gleichheitsvergleich zwischen dem neuen Elementobjekt und dem vorhandenen Objekt im Set false zurückgibt, akzeptiert Set das neue Elementobjekt, andernfalls wird es abgelehnt.
Aufgrund dieser Einschränkung von Set sollten Sie bei der Verwendung der Set-Sammlung auf zwei Punkte achten: 1) Implementieren Sie eine effektive Equals-Methode (Objekt) für die Implementierungsklasse der Elemente in der Set-Sammlung, 2) für den Konstruktor of Set, Der übergebene Collection-Parameter darf keine
oder wiederholten Elemente enthalten
1.1) HashSet
HashSet ist eine typische Implementierung der Set-Schnittstelle. HashSet verwendet den HASH-Algorithmus, um Elemente in der Sammlung zu speichern verfügt über gute Zugriffs- und Suchfunktionen. Wenn ein Element in der HashSet-Sammlung gespeichert wird, ruft HashSet die hashCode()-Methode des Objekts auf, um den hashCode-Wert des Objekts abzurufen, und bestimmt dann den Speicherort des Objekts im HashSet basierend auf dem HashCode-Wert.
Erwähnenswert ist vor allem, dass der Standard zur Beurteilung der Gleichheit zweier Elemente in einem HashSet-Satz darin besteht, dass die beiden Objekte durch die Methode equal() gleich sind und die Rückgabewerte von hashCode() Methode der beiden Objekte sind gleich
1.1.1) LinkedHashSet
Der LinkedHashSet-Satz bestimmt auch den Speicherort der Elemente basierend auf dem HashCode-Wert der Elemente, verwendet aber im Gegensatz zu HashSet auch eine verknüpfte Liste zur Verwaltung die Reihenfolge der Elemente, sodass die Elemente scheinbar in der Reihenfolge des Einfügens gespeichert werden.
Beim Durchlaufen der Elemente in der LinkedHashSet-Sammlung greift LinkedHashSet auf die Elemente in der Sammlung in der Reihenfolge zu, in der die Elemente hinzugefügt werden.
LinkedHashSet muss die Einfügereihenfolge der Elemente beibehalten, daher ist die Leistung etwas geringer als die von HashSet, weist jedoch eine gute Leistung auf, wenn iterativ auf alle Elemente im Set zugegriffen wird (Durchquerung) (verknüpfte Listen eignen sich sehr gut für die Durchquerung).
1.2 ) SortedSet
Diese Schnittstelle wird hauptsächlich für Sortieroperationen verwendet, das heißt, die Unterklassen, die diese Schnittstelle implementieren, sind alle sortierte Unterklassen
1.2.1) TreeSet
TreeSet ist die Implementierungsklasse von SortedSet-Schnittstelle. TreeSet kann sicherstellen, dass die Sammlungselemente im sortierten Zustand sind.
1.3) EnumSet
EnumSet ist eine Sammlungsklasse, die speziell für Aufzählungsklassen entwickelt wurde. Alle Elemente in EnumSet müssen Aufzählungswerte des angegebenen Aufzählungstyps sein Der Aufzählungstyp wird beim Erstellen der EnumSet-Formel angezeigt oder implizit angegeben. Die Mengenelemente von EnumSet sind ebenfalls geordnet.
Sie bestimmen die Reihenfolge der Mengenelemente basierend auf der Definitionsreihenfolge der Aufzählungswerte in der Enum-Klasse.
2) Liste
Die List-Sammlung stellt eine geordnete Liste dar und wiederholbare Elementmengen, jedes Element in der Menge hat seinen entsprechenden sequentiellen Index. Die List-Sammlung ermöglicht das Hinzufügen doppelter Elemente, da sie über den Index auf das Sammlungselement an der angegebenen Position zugreifen kann. Standardmäßig legt die List-Sammlung den Index der Elemente
in der Reihenfolge fest, in der sie hinzugefügt werden. 2.1) ArrayList
ArrayList ist eine auf Arrays basierende List-Klasse. Sie kapselt ein dynamisch wachsendes Object[]-Array, das dies ermöglicht Umverteilung.
2.2) Vector
Vector und ArrayList sind in der Verwendung nahezu identisch, aber da Vector eine alte Sammlung ist, stellt Vector einige Methoden mit langen Methodennamen bereit, aber mit JDK1.2 und höher stellt Java bereit Nach dem Verständnis des Sammlungsframeworks des Systems werden wir Vector ändern, um die List-Schnittstelle zu implementieren und sie in das Collection-Framework-System
2.2.1) Stack
zu integrieren Stack ist eine von Vector bereitgestellte Unterklasse, die zur Simulation der Datenstruktur von „Stack“ (LIFO Last In First Out) verwendet wird.
implementiert List
. Natürlich kann es auch als „Stack“ verwendet werden
3) Queue
Queue wird verwendet, um die Datenstruktur einer „Queue“ (First In First Out FIFO) zu simulieren. Der Kopf der Warteschlange enthält das Element mit der längsten Speicherzeit in der Warteschlange, und das Ende der Warteschlange enthält das Element mit der kürzesten Speicherzeit in der Warteschlange. Ein neues Element wird am Ende der Warteschlange eingefügt (Angebot). Die Zugriffselementoperation (Abfrage) gibt das Element an der Spitze der Warteschlange zurück. Die Warteschlange erlaubt keinen wahlfreien Zugriff auf Elemente in der Warteschlange. Sie erhalten ein gutes Verständnis dieses Konzepts, indem Sie die im Leben üblichen Warteschlangen kombinieren.
3.1) PriorityQueue
PriorityQueue ist keine relativ standardmäßige Warteschlangenimplementierung. Die Reihenfolge, in der die Warteschlangenelemente von PriorityQueue gespeichert werden, ist nicht in der Reihenfolge des Beitritts zur Warteschlange, jedoch in der Reihenfolge der Warteschlange. Die Größe der Elemente wird neu angeordnet, was auch aus dem Klassennamen ersichtlich ist.
3.2) Deque
3.2) Die Deque-Schnittstelle stellt eine „doppelte Warteschlange“ dar ", und eine doppelendige Warteschlange kann von beiden Enden gleichzeitig hinzugefügt werden, Elemente löschen, sodass die Implementierungsklasse von Deque entweder als Warteschlange oder als Stapel verwendet werden kann
3.2.1) ArrayDeque
3.2 .1) ArrayDeque
ist eine doppelendige Warteschlange, die auf einem Array basiert. Beide verwenden ein dynamisches, weiterverteilbares Object[]-Array, um Sammlungselemente zu speichern Array, das System weist ein Object[]-Array auf der untersten Ebene neu zu, um die Sammlungselemente zu speichern
3.2.2) LinkedList
1.2 Map
Map wird zum Speichern von Daten mit „Mapping-Beziehung“ verwendet. Daher speichert die Map-Sammlung zwei Wertesätze. Ein Wertesatz wird zum Speichern des Schlüssels in der Karte und der andere Wertesatz zum Speichern des Werts in der Karte verwendet. Sowohl Schlüssel als auch Wert können beliebige Referenzdatentypen sein. Kartenschlüssel dürfen nicht wiederholt werden, d. h. das Vergleichsergebnis zweier beliebiger Schlüssel desselben Kartenobjekts über die Methode „equals“ gibt immer „false“ zurück.
In Bezug auf Map müssen wir es aus der Perspektive der Code-Wiederverwendung verstehen und dann die Set-Sammlung implementieren, indem wir eine Map mit allen Werten packen -classes of Map Die Speicherform des in der Schnittstelle festgelegten Schlüsselsatzes ist genau die gleiche wie in der Set-Sammlung (dh der Schlüssel kann nicht wiederholt werden).
Die Speicherform des in diesen Implementierungsklassen und Unterschnittstellen festgelegten Wertsatzes von Map ist dem von List sehr ähnlich (d. h. der Wert kann wiederholt und anhand des Index durchsucht werden)
1) HashMap
Genauso wie die HashSet-Sammlung die Reihenfolge der Elemente nicht garantieren kann, kann HashMap dies nicht garantieren die Reihenfolge der Schlüssel-Wert-Paare. Und ähnlich wie bei HashSet lautet der Standard zur Beurteilung, ob zwei Schlüssel gleich sind: Zwei Schlüssel werden mit der Methode equal() verglichen und geben true zurück.
Gleichzeitig müssen auch die HashCode-Werte der beiden Schlüssel übereinstimmen gleich
1.1) LinkedHashMap
LinkedHashMap verwendet auch eine doppelt verknüpfte Liste, um die Reihenfolge der Schlüssel-Wert-Paare beizubehalten. Die verknüpfte Liste ist für die Aufrechterhaltung der Iterationsreihenfolge der Map verantwortlich, die mit der Einfügereihenfolge der Schlüssel übereinstimmt -Wert-Paare (beachten Sie, dass es sich von TreeMap in der Sortierung aller Schlüssel-Wert-Paare unterscheidet)
2) Hashtable
ist eine alte Map-Implementierungsklasse
2.1) Properties
Das Properties-Objekt ist besonders praktisch, wenn Verarbeitung von Eigenschaftsdateien (.ini-Dateien auf Windows-Plattformen). Die Properties-Klasse kann Map-Objekte mit den Attributdateien verknüpfen, sodass die Schlüssel-Wert-Paare im Map-Objekt in die Attributdatei
geschrieben werden können „Attributname-Attributwert“ in der Attributdatei kann in das Kartenobjekt geladen werden Die Kartenschnittstelle leitet auch eine SortedMap-Unterschnittstelle ab, und die SortedMap-Schnittstelle verfügt auch über eine TreeMap-Implementierungsklasse
3.1) TreeMap
TreeMap Es handelt sich um eine rot-schwarze Baumdatenstruktur, und jedes Schlüssel-Wert-Paar dient als Knoten des rotschwarzen Baumes. Wenn TreeMap Schlüssel-Wert-Paare (Knoten) speichert, müssen die Knoten nach dem Schlüssel sortiert werden. TreeMap kann sicherstellen, dass alle
Schlüssel-Wert-Paare in einem geordneten Zustand sind. Ebenso verfügt TreeMap über zwei Sortiermethoden: natürliche Sortierung und benutzerdefinierte Sortierung
4) WeakHashMap
Die Verwendung von WeakHashMap und HashMap ist grundsätzlich ähnlich. Der Unterschied besteht darin, dass der HashMap-Schlüssel einen „starken Verweis“ auf das tatsächliche Objekt beibehält. Dies bedeutet, dass das von der HashMap referenzierte Objekt nicht durch Müll gesammelt wird, solange das HashMap-Objekt nicht zerstört wird.
Der Schlüssel von WeakHashMap behält jedoch nur einen schwachen Verweis auf das tatsächliche Objekt bei. Wenn also die Objekte, auf die durch die Schlüssel des WeakHashMap-Objekts verwiesen wird, nicht durch andere starke Referenzvariablen referenziert werden, können die von diesen Schlüsseln referenzierten Objekte Müll sein Wenn das tatsächliche Objekt, das dem Schlüssel entspricht, durch Müll gesammelt wird, löscht WeakHashMap möglicherweise auch automatisch die diesen Schlüsseln entsprechenden Schlüssel-Wert-Paare
5) IdentityHashMap
Der Implementierungsmechanismus von IdentityHashMap ähnelt im Wesentlichen dem von HashMap in IdentityHashMap , IdentityHashMap betrachtet zwei Schlüssel genau dann als gleich, wenn sie genau gleich sind (key1 == key2)
6) EnumMap
EnumMap ist eine Map-Implementierung, die mit EnumMap verwendet wird. Alle Schlüssel in müssen Aufzählungswerte von sein eine einzelne Aufzählungsklasse. Beim Erstellen einer EnumMap muss die entsprechende Aufzählungsklasse explizit oder implizit angegeben werden. EnumMap basiert auf der natürlichen Reihenfolge der Schlüssel
(d. h. der Reihenfolge, in der Aufzählungswerte in der Aufzählungsklasse definiert sind)
Java Collection Framework-Diagramm
Einführung in die Java Collection Framework-Architektur
Java Detaillierte Einführung in das Sammlungsframework der wichtigsten technischen Punkte
Das obige ist der detaillierte Inhalt vonWas ist eine Sammlung? Grundlegende Einführung in Java-Sammlungen (mit Framework-Diagramm). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!