Heim >Java >javaLernprogramm >Studiennotizen zum Java Collection Framework

Studiennotizen zum Java Collection Framework

PHPz
PHPzOriginal
2017-04-04 10:36:581669Durchsuche

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

abgeleitet sind. Set-Sammlungen dürfen nicht dieselben Elemente enthalten, und es ist nicht offensichtlich Reihenfolge zwischen Objekten in der Sammlung

HashSet, LinkedHashSet und TreeSet sind die Hauptimplementierungsklassen von Set

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

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.

Vergleich der Leistung verschiedener Sets

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: 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.

Vector verfügt außerdem über eine Unterklasse namens Stack, die zur Simulation der Datenstruktur eines Stapels verwendet wird. Da es sich um eine
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.

Der Unterschied zwischen LinkedList und ArrayList
Da ArrayList die Elemente in der Sammlung intern in Form eines Arrays speichert, weist es eine bessere Leistung auf, wenn zufällig auf Sammlungselemente zugegriffen wird, während LinkedList in der Form vorliegt einer verknüpften Liste wird zum Speichern der Elemente der Sammlung verwendet, daher ist die Leistung beim Direktzugriff schlecht, aber die Leistung beim Einfügen und Löschen von Elementen ist sehr gut.

Map wird zum Speichern von Daten mit Mapping-Beziehungen verwendet. Sowohl Schlüssel als auch Wert können beliebige Referenzdatentypen sein, aber der Schlüsselwert von Map ist eindeutig und kann nicht wiederholt werden.

HashMap und Hashtable sind es Maps Zwei Implementierungsklassen
Hashtable ist eine threadsichere Map-Implementierungsklasse, HashMap ist jedoch nicht threadsicher, sodass die Leistung von HashMap etwas besser ist.

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.
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.

TreeMap
Unter Map gibt es auch eine SortedMap-Schnittstelle. Wenn TreeMap Schlüssel-Wert-Paare speichert, müssen Knoten nach der TreeMap-Sortierung sortiert werden ist in natürliche Sortierung und benutzerdefinierte Sortierung unterteilt. Bei der geplanten Sortierung muss beim Erstellen einer TreeMap ein Comparator-Objekt übergeben werden, und dieses Objekt sortiert die Schlüssel in der TreeMap. Ähnlich wie TreeSet. TreeMap ist langsamer als HashMap und Hashtable, da die Reihenfolge beibehalten werden muss.

Der Unterschied zwischen Collection und Collections

Collection ist eine Schnittstelle von Javas Collection

FrameworkCollections ist eine Werkzeugklasse im Collection-Framework, die eine große Anzahl bereitstellt Eine Reihe von Methoden werden zum Sortieren von Sammlungselementen, zum
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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn