Java - Collections-Framework
Vor Java 2 stellte Java Ad-hoc-Klassen wie Dictionary, Vector, Stack bereit und Eigenschaften Gruppen von Objekten zu speichern und zu manipulieren. Obwohl diese Klassen sehr nützlich waren, fehlte ihnen ein zentrales, vereinheitlichendes Thema. Daher unterschied sich die Art und Weise, wie Sie Vector verwendet haben, von der Art und Weise, wie Sie Eigenschaften verwendet haben.
Das Sammlungs-Framework wurde entwickelt, um mehrere Ziele zu erreichen, wie z. B. −
-
Das Framework musste leistungsstark sein. Die Implementierungen für die grundlegenden Sammlungen (dynamische Arrays, verknüpfte Listen, Bäume und Hashtabellen) sollten hocheffizient sein.
-
Das Framework musste ermöglichen, dass verschiedene Arten von Sammlungen auf ähnliche Weise und mit einem hohen Grad an Interoperabilität funktionieren.
-
Das Framework musste eine Sammlung einfach erweitern und/oder anpassen.
Zu diesem Zweck ist das gesamte Sammlungs-Framework um eine Reihe von Standardschnittstellen herum entworfen. Mehrere Standardimplementierungen wie LinkedList, HashSet, und TreeSet , dieser Schnittstellen werden bereitgestellt, die Sie so verwenden können, wie sie sind, und Sie können auch Ihre eigene Sammlung implementieren, wenn Sie dies wünschen.
Ein Sammlungsframework ist eine einheitliche Architektur zum Darstellen und Bearbeiten von Sammlungen. Alle Sammlungs-Frameworks enthalten Folgendes:−
-
Schnittstellen − Dies sind abstrakte Datentypen, die Sammlungen darstellen. Schnittstellen ermöglichen es, Sammlungen unabhängig von den Details ihrer Repräsentation zu manipulieren. In objektorientierten Sprachen bilden Schnittstellen im Allgemeinen eine Hierarchie.
-
Implementierungen, d. h. Klassen − Dies sind die konkreten Implementierungen der Erfassungsschnittstellen. Im Wesentlichen handelt es sich um wiederverwendbare Datenstrukturen.
-
Algorithmen − Dies sind die Methoden, die nützliche Berechnungen wie Suchen und Sortieren an Objekten durchführen, die Sammlungsschnittstellen implementieren. Die Algorithmen werden als polymorph bezeichnet:Das heißt, dieselbe Methode kann auf vielen verschiedenen Implementierungen der entsprechenden Sammlungsschnittstelle verwendet werden.
Zusätzlich zu Sammlungen definiert das Framework mehrere Kartenschnittstellen und -klassen. Karten speichern Schlüssel/Wert-Paare. Obwohl Karten keine Sammlungen sind in der richtigen Verwendung des Begriffs, aber sie sind vollständig in Sammlungen integriert.
Die Sammlungsschnittstellen
Das Sammlungsframework definiert mehrere Schnittstellen. Dieser Abschnitt bietet einen Überblick über jede Schnittstelle −
Sr.No. | Schnittstelle &Beschreibung |
---|---|
1 | Die Sammlungsschnittstelle Dadurch können Sie mit Gruppen von Objekten arbeiten; es steht an der Spitze der Sammlungshierarchie. |
2 | Das Listen-Interface Dies erweitert die Sammlung und eine Instanz von List speichert eine geordnete Sammlung von Elementen. |
3 | Der Satz Dies erweitert Collection, um Sets zu handhaben, die eindeutige Elemente enthalten müssen. |
4 | Das SortedSet Dies erweitert Set, um sortierte Sets zu handhaben. |
5 | Die Karte Dies ordnet eindeutige Schlüssel Werten zu. |
6 | Der Map.Entry Dies beschreibt ein Element (ein Schlüssel/Wert-Paar) in einer Map. Dies ist eine innere Klasse von Map. |
7 | Die SortedMap Dadurch wird Map so erweitert, dass die Schlüssel in aufsteigender Reihenfolge beibehalten werden. |
8 | Die Aufzählung Diese Legacy-Schnittstelle definiert die Methoden, mit denen Sie die Elemente in einer Sammlung von Objekten aufzählen (einzeln abrufen) können. Diese Legacy-Schnittstelle wurde durch Iterator ersetzt. |
Die Sammelklassen
Java stellt eine Reihe von Standardsammlungsklassen bereit, die Sammlungsschnittstellen implementieren. Einige der Klassen bieten vollständige Implementierungen, die unverändert verwendet werden können, und andere sind abstrakte Klassen, die Skelettimplementierungen bereitstellen, die als Ausgangspunkte für die Erstellung konkreter Sammlungen verwendet werden.
Die Standardsammlungsklassen sind in der folgenden Tabelle zusammengefasst −
Sr.No. | Klasse &Beschreibung |
---|---|
1 | AbstractCollection Implementiert den größten Teil der Collection-Schnittstelle. |
2 | Zusammenfassungsliste Erweitert AbstractCollection und implementiert den größten Teil der List-Schnittstelle. |
3 | AbstractSequentialList Erweitert AbstractList zur Verwendung durch eine Sammlung, die sequenziellen statt zufälligen Zugriff auf ihre Elemente verwendet. |
4 | VerknüpfteListe Implementiert eine verknüpfte Liste durch Erweitern von AbstractSequentialList. |
5 | ArrayList Implementiert ein dynamisches Array durch Erweitern von AbstractList. |
6 | AbstractSet Erweitert AbstractCollection und implementiert den größten Teil der Set-Schnittstelle. |
7 | HashSet Erweitert AbstractSet zur Verwendung mit einer Hash-Tabelle. |
8 | LinkedHashSet Erweitert HashSet, um Wiederholungen der Einfügereihenfolge zu ermöglichen. |
9 | TreeSet Implementiert eine in einem Baum gespeicherte Menge. Erweitert AbstractSet. |
10 | AbstractMap Implementiert den größten Teil der Map-Schnittstelle. |
11 | HashMap Erweitert AbstractMap, um eine Hash-Tabelle zu verwenden. |
12 | Baumkarte Erweitert AbstractMap, um einen Baum zu verwenden. |
13 | WeakHashMap Erweitert AbstractMap, um eine Hash-Tabelle mit schwachen Schlüsseln zu verwenden. |
14 | LinkedHashMap Erweitert HashMap, um Iterationen in der Einfügungsreihenfolge zu ermöglichen. |
15 | IdentityHashMap Erweitert AbstractMap und verwendet Referenzgleichheit beim Vergleichen von Dokumenten. |
Die AbstractCollection, AbstractSet, AbstractList, AbstractSequentialList und AbstractMap Klassen stellen Skelettimplementierungen der Core-Collection-Schnittstellen bereit, um den Aufwand für deren Implementierung zu minimieren.
Die folgenden von java.util definierten Legacy-Klassen wurden im vorherigen Kapitel besprochen −
Sr.No. | Klasse &Beschreibung |
---|---|
1 | Vektor Dies implementiert ein dynamisches Array. Es ist ähnlich wie ArrayList, aber mit einigen Unterschieden. |
2 | Stapeln Stack ist eine Unterklasse von Vector, die einen standardmäßigen Last-In-First-Out-Stack implementiert. |
3 | Wörterbuch Dictionary ist eine abstrakte Klasse, die ein Speicher-Repository für Schlüssel/Werte darstellt und ähnlich wie Map. funktioniert |
4 | Hashtabelle Hashtable war Teil des ursprünglichen java.util und ist eine konkrete Implementierung eines Wörterbuchs. |
5 | Eigenschaften Properties ist eine Unterklasse von Hashtable. Es wird verwendet, um Wertelisten zu verwalten, in denen der Schlüssel ein String und der Wert ebenfalls ein String ist. |
6 | BitSet Eine BitSet-Klasse erstellt einen speziellen Array-Typ, der Bitwerte enthält. Dieses Array kann nach Bedarf vergrößert werden. |
Die Erfassungsalgorithmen
Das Sammlungsframework definiert mehrere Algorithmen, die auf Sammlungen und Karten angewendet werden können. Diese Algorithmen sind als statische Methoden innerhalb der Collections-Klasse definiert.
Einige der Methoden können eine ClassCastException auslösen , die auftritt, wenn versucht wird, inkompatible Typen zu vergleichen, oder eine UnsupportedOperationException , die auftritt, wenn versucht wird, eine nicht änderbare Sammlung zu ändern.
Sammlungen definieren drei statische Variablen:EMPTY_SET, EMPTY_LIST und EMPTY_MAP. Alle sind unveränderlich.
Sr.No. | Algorithmus &Beschreibung |
---|---|
1 | Die Erfassungsalgorithmen Hier ist eine Liste aller Algorithmenimplementierungen. |
Wie benutzt man einen Iterator?
Oft möchten Sie die Elemente in einer Sammlung durchlaufen. Beispielsweise möchten Sie möglicherweise jedes Element anzeigen.
Der einfachste Weg, dies zu tun, ist die Verwendung eines Iterators, bei dem es sich um ein Objekt handelt, das entweder das Iterator- oder das ListIterator-Interface implementiert.
Iterator ermöglicht es Ihnen, eine Sammlung zu durchlaufen und Elemente zu erhalten oder zu entfernen. ListIterator erweitert Iterator, um das bidirektionale Durchlaufen einer Liste und die Änderung von Elementen zu ermöglichen.
Sr.No. | Iterator-Methode und -Beschreibung |
---|---|
1 | Verwendung von Java Iterator Hier ist eine Liste aller Methoden mit Beispielen, die von den Schnittstellen Iterator und ListIterator bereitgestellt werden. |
Wie verwende ich einen Komparator?
Sowohl TreeSet als auch TreeMap speichern Elemente in einer sortierten Reihenfolge. Es ist jedoch der Komparator, der genau definiert, in welcher sortierten Reihenfolge bedeutet.
Mit dieser Schnittstelle können wir eine bestimmte Sammlung auf verschiedene Arten sortieren. Außerdem kann diese Schnittstelle verwendet werden, um alle Instanzen jeder Klasse zu sortieren (selbst Klassen, die wir nicht ändern können).
Sr.No. | Iterator-Methode und -Beschreibung |
---|---|
1 | Verwendung von Java Comparator Hier ist eine Liste aller Methoden mit Beispielen, die von Comparator Interface bereitgestellt werden. |
Zusammenfassung
Das Java Collections Framework gibt dem Programmierer Zugriff auf vorgefertigte Datenstrukturen sowie auf Algorithmen zu ihrer Bearbeitung.
Eine Sammlung ist ein Objekt, das Verweise auf andere Objekte enthalten kann. Die Sammlungsschnittstellen deklarieren die Operationen, die für jeden Sammlungstyp ausgeführt werden können.
Die Klassen und Schnittstellen des Sammlungs-Frameworks befinden sich im Paket java.util.
Java