Die Java-Sammlungsklasse kann zum Speichern mehrerer Objekte unterschiedlicher Anzahl verwendet werden und kann allgemeine Datenstrukturen wie Stapel, Warteschlangen usw. implementieren. Im Gegensatz zu Arrays ist die Länge von Arrays unveränderlich. Array-Elemente können Basistypen und Objekttypen speichern, während Sammlungen nur Objekte speichern können (im Wesentlichen Objekt-ReferenzenVariablen), Java-Sets können ungefähr sein unterteilt in Set, List und Map, wobei Set einen ungeordneten, nicht wiederholbaren Satz darstellt und List einen geordneten, wiederholbaren Satz darstellt Bei einer Sammlung mit einer Zuordnungsbeziehung ist der Schlüssel in der Zuordnung eindeutig und der Wert ist wiederholbar. Darunter sind Set, List und die nach Java5 neu hinzugefügte Warteschlangenwarteschlange Unterschnittstellen, die von CollectionInterface
HashSet kann die Reihenfolge der Elemente nicht garantieren, HashSet ist nicht synchronisiert und HashSet-Set-Elemente sind zulässig sein nullWenn ein Objekt in einem HashSet gespeichert wird, ruft das HashSet die hashCode-Methode des Objekts auf, um den hashCode-Wert des Objekts abzurufen und den Speicherort des Objekts im HashSet basierend zu bestimmen auf dem hashCode-Wert. In HashSet wird beurteilt, ob zwei Objekte gleich sind, indem die Rückgabewerte der Methoden equal() und hashCode() verglichen werden.
LinkedHashSet ist eine Unterklasse von HashSet, verwendet jedoch auch eine verknüpfte Liste zur Verwaltung Reihenfolge der Elemente, sodass die Elemente scheinbar in der Reihenfolge des Einfügens gespeichert werden. Da die Einfügereihenfolge der Elemente beibehalten werden muss, ist die Leistung etwas geringer als die von HashSet, da es sich immer noch um ein HashSet handelt kann nicht wiederholt werden
TreeSet ist die Implementierungsklasse der SortedSet-Schnittstelle. Ebenso kann TreeSet sicherstellen, dass sich die Sammlungselemente im sortierten -Zustand befinden Die Methode comparTo (Object obj) der Sammlungselemente vergleicht die Größenbeziehung zwischen den Elementen und legt dann die Sammlungselemente fest. Die Elemente werden in aufsteigender Reihenfolge angeordnet, dh in natürlicher Sortierung. TreeSet kann auch eine benutzerdefinierte Sortierung über die Comparator-Schnittstelle implementieren. Beim Erstellen eines TreeSet-Sammlungsobjekts wird ein Comparator-Objekt bereitgestellt, das der TreeSet-Sammlung zugeordnet wird, und das Comparator-Objekt ist für die Sortierlogik der Sammlungselemente verantwortlich.
Die Leistung von HashSet ist immer besser als die von TreeSet, da TreeSet zusätzliche Algorithmen benötigt, um die Reihenfolge der Set-Elemente beizubehalten. TreeSet sollte nur verwendet werden, wenn ein Set dies erfordert Andernfalls sollte HashSet verwendet werden. Darüber hinaus ist LinkedHashSet eine Unterklasse von HashSet, die normalen Einfüge- und Löschvorgängen entspricht. Die Leistung von LinkedHashSet ist jedoch etwas langsamer als die von HashSet Aufgrund der verknüpften Liste ist es beim Durchlaufen von LinkedHashSet schneller. Allerdings ist keine der drei Implementierungsklassen von set threadsicher. Sie können normalerweise die synchronizedSortedSet-Methode der Collections-Toolklasse verwenden. Diese Operation ist am besten Wird zum Zeitpunkt der Erstellung ausgeführt. Zum Beispiel: Vector verfügt außerdem über eine Unterklasse namens Stack, die zur Simulation der Datenstruktur eines Stapels verwendet wird. Da es sich um eine Darüber hinaus erlaubt Hashtable nicht die Verwendung von Null als Schlüssel und Wert. Der Versuch, Null in Hashtable einzufügen, führt zu einer Nullzeigerausnahme, HashMap kann jedoch Null als Schlüssel und Wert verwenden Es gibt nur einen Schlüssel, der null ist. Es können jedoch mehrere Werte vorhanden sein, die null sind. FrameworkCollections ist eine Werkzeugklasse im Collection-Framework, die eine große Anzahl bereitstellt Eine Reihe von Methoden werden zum Sortieren von Sammlungselementen, zum SortedSet s = Collections.synchronizedSortedSet(<a href="http://www.php.cn/wiki/165.html" target="_blank">new</a> TreeSet(.. .));
Die List-Sammlung stellt eine geordnete und wiederholbare Sammlung dar. Die Elemente in der Sammlung haben ihre entsprechenden
ArrayList und Vector sind Listen. Es gibt zwei typische Implementierungen von LinkedList
, bei denen die Klassen ArrayList und Vector ein dynamisches Object[]-Array kapseln, das eine Neuzuweisung ermöglicht, wenn die Anzahl der Elemente hinzugefügt wird. Wenn die Array-Länge überschritten wird, wird die anfängliche Die Länge wird automatisch erhöht. Der wesentliche Unterschied zwischen ArrayList und Vector besteht darin, dass ArrayList nicht threadsicher ist, während Vector threadsicher ist und kein Programm benötigt, um die Synchronisierung der Sammlung sicherzustellen. Da Vector threadsicher ist, ist die Farbleistung von Vector geringer als die von ArrayList. Auch wenn die Thread-Sicherheit gewährleistet sein muss, wird die Verwendung von Vector im Allgemeinen nicht empfohlen. Verwenden Sie stattdessen die entsprechenden Methoden der Collections-Tool-Klasse, um die ArrayList in eine thread-sichere Klasse einzubinden.
Vererbungsbeziehung handelt, ist Stack auch threadsicher Die Leistung ist relativ schlecht. Wenn Sie eine Datenstruktur wie einen Stapel verwenden müssen, können Sie die Verwendung von LinkedList in Betracht ziehen.LinkedList ist auch eine Implementierungsklasse von List Die List-Implementierung ist für den sequentiellen Zugriff auf Elemente in der Sammlung optimiert, insbesondere für das Einfügen von Elementen. Da sie sowohl die List-Schnittstelle als auch die Deque-Schnittstelle implementiert, kann sie als solche verwendet werden Stapel. Die Queue-Sammlung wird verwendet, um die Datenstruktur einer Warteschlange zu simulieren, First In, Last Out. Deque ist eine Unterschnittstelle von Queue, die eine doppelseitige Warteschlange darstellt und die Manipulation von Elementen der Warteschlange von beiden Enden aus ermöglicht.
Das Kriterium zur Beurteilung der Gleichheit zweier Schlüssel in HashMap und Hashtable besteht darin, dass die Rückgabewerte der beiden Schlüssel durch die Methoden equal() und hashCode() gleich sind.
LinkedHashMap ist eine Unterklasse von HashMap. LinkedHashMap verwendet außerdem eine doppelt verknüpfte Liste, um die Reihenfolge der Schlüssel beizubehalten, dh die Iterationsreihenfolge stimmt mit der Einfügereihenfolge überein. Da die Einfügereihenfolge der Elemente beibehalten werden muss, ist die Gesamtleistung etwas geringer als bei HashMap.
Abfragen , zum Ändern und für andere Vorgänge verwendet. Außerdem werden einige Methoden zum Festlegen von Sammlungsobjekten als unveränderlich und zur Erzielung einer Synchronisationssteuerung von Objektsammlungen bereitgestellt.
Das obige ist der detaillierte Inhalt vonStudiennotizen zum Java Collection Framework. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!