Java -Sammlungen sind Toolkits von Java, die häufig verwendete Datenstrukturen enthalten: Sammlungen, verknüpfte Listen, Warteschlangen, Stapel, Arrays, Karten usw. Der Ort des Java -Sammel -Toolkits ist Java.util.*
Java -Sammlungen können in 4 Teile unterteilt werden: Listenliste, Sammlung, Kartenkarte, Werkzeugklassen (Iterator -Iterator, Aufzählungsklasse der Aufzählung, Arrays und Sammlungen).
Das Java Collection Toolkit Framework ist unten gezeigt.
HINWEIS: Betrachten Sie das Gerüstdiagramm oben und erfassen Sie zuerst seinen Kofferraum, nämlich Sammlung und Karte.
Die Sammlung ist eine Schnittstelle, eine hoch abstrakte Sammlung, die die grundlegenden Operationen und Eigenschaften der Sammlung enthält.
Die Sammlung umfasst zwei Zweige: Liste und Set.
(01) Die Liste ist eine geordnete Warteschlange, und jedes Element hat seinen Index. Der Indexwert des ersten Elements beträgt 0.
Zu den Listen -Implementierungsklassen gehören LinkedList, ArrayList, Vector, Stack.
(02) Set ist eine Sammlung, die keine doppelten Elemente zulässt.
Die festgelegten Implementierungsklassen umfassen Hastet und Treeset. Hashset stützt sich auf HashMap, das tatsächlich durch HashMap implementiert wird. Treeset verlässt sich auf Treemap, das tatsächlich durch Treemap umgesetzt wird.
MAP ist eine Zuordnungsinterface, nämlich Schlüsselwertpaare von Schlüsselwert. Jedes Element in der Karte enthält "einen Schlüssel" und "einen Wert, der dem Schlüssel entspricht".
AbstractMap ist eine abstrakte Klasse, die die meisten APIs in der Kartenschnittstelle implementiert. Hashmap, Treemap und WeaPhashMap werden alle von AbstractMap geerbt.
Obwohl Hashtable aus dem Wörterbuch erbt, implementiert es die Kartenschnittstelle.
Schauen wir uns als nächstes Iterator an. Es ist ein Werkzeug zum Durchqueren von Sammlungen, dh normalerweise durchqueren wir Kollektionen durch Iterator -Iterator. Wir sagen, dass die Sammlung vom Iterator abhängt, da die Implementierungsklassen der Sammlung die Funktion iterator () implementieren und ein Iteratorobjekt zurückgeben müssen.
ListIterator existiert speziell für die Durchquerenliste.
Schauen wir uns die Aufzählung erneut an, es handelt sich um eine abstrakte Klasse, die von JDK 1.0 eingeführt wird. Wie Iterator durchquert es auch eine Sammlung; Die Aufzählung hat jedoch weniger Funktionen als Iterator. Im obigen Blockdiagramm kann die Aufzählung nur in Hashtable, Vektor, Stapel verwendet werden.
Schauen Sie sich schließlich Arrays und Sammlungen an. Es sind zwei Werkzeugklassen, die Arrays und Sammlungen betreiben.
Mit dem obigen Gesamtrahmen analysieren wir jede Klasse separat.
Sammlungsarchitektur
Im Folgenden werden wir die Sammlung zusammenfassen. Schauen wir uns die Beziehungsdiagramme einiger Rahmenklassen in der Sammlung an:
Die Sammlung ist eine Schnittstelle, und die beiden Hauptzweige sind: List und festgelegt.
List und Set sind Schnittstellen, und sie erben von der Sammlung. Die Liste ist eine bestellte Warteschlange, und in der Liste können wiederholte Elemente erhalten werden. Während SET eine Sammlung in mathematischen Konzepten ist und es keine Wiederholungselemente im Set gibt!
List und Set haben ihre eigenen Implementierungsklassen.
Zur einfachen Implementierung ist die abstrakte Abstract -Klasse der AbstractCollection in der Sammlung definiert, die die meisten Funktionen in der Sammlung implementiert. Auf diese Weise können wir in der Sammlungsimplementierungsklasse doppelte Codierung speichern, indem wir AbstractCollection erben. AbstractList und AbstractSet erben sowohl aus AbstractCollection, die spezifische List -Implementierungsklasse erben von AbstractList, und die Set -Implementierungsklasse erbr von AbstractSet.
Darüber hinaus gibt es in der Sammlung eine Iterator () -Funktion, mit der eine Iterator -Schnittstelle zurückgegeben wird. Normalerweise durchqueren wir die Sammlung durch den Iterator -Iterator. Listiterator ist einzigartig für die List -Schnittstelle. In der List -Schnittstelle wird ein Listiterator -Objekt über Listiterator () zurückgegeben.
Schauen wir uns als nächstes die Einführung jeder Schnittstelle und abstrakten Klasse an. Dann haben wir ein detailliertes Verständnis der Implementierungsklasse.
1. Einführung in die Sammlung
Die Definition der Sammlung ist wie folgt:
öffentliche Schnittstellensammlung <e> erweitert iterable <e> {} Es handelt sich um eine Schnittstelle, eine stark abstrahierte Sammlung, die die grundlegenden Vorgänge der Sammlung enthält: Hinzufügen, Löschen, Löschen, Durchlaufen (Lesen), unabhängig davon, ob es leer ist, die Größe erhalten, ob sie durch ein bestimmtes Element geschützt ist, usw.
Alle Unterklassen der Sammelschnittstelle (direkte Unterklasse und indirekte Unterklasse) müssen zwei Konstrukteure implementieren: Konstruktoren ohne Parameter und Konstruktoren mit Parameternersammlung. Ein Konstruktor mit Parametern kann verwendet werden, um den Typ der Sammlung umzuwandeln.
// Sammlung Apiabspract boolean add (E -Objekt) Abstract Boolean Addall (Sammlung <? Erweitert E> Sammlung) Abstract void clear () Abstract Boolean enthält (Objektobjekt) Abstract Boolean enthält Objekt) Abstract Boolean Removeall (Sammlung <?> Sammlung) Abstract Boolean Retainall (Sammlung <?> Sammlung) Abstract Int Size () Abstract <T> T [] TOARRAY (T [] Array) abstraktes Objekt [] toArray ()
2. Einführung in die Liste
Die Definition der Liste lautet wie folgt:
Öffentliche Schnittstellenliste <e> erweitert die Sammlung <E> {} Die Liste ist eine Schnittstelle, die aus der Sammlung erbelt wird, dh eine Liste ist eine Art Sammlung. Die Liste ist eine geordnete Warteschlange, und jedes Element in der Liste hat einen Index. Der Indexwert des ersten Elements beträgt 0 und der Indexwert der nachfolgenden Elemente +1 wiederum. Im Gegensatz zu SET sind doppelte Elemente in der Liste zulässig. Die offizielle Einführung der Liste ist wie folgt:
Eine Liste ist eine Sammlung, die eine Bestellung für ihre Elemente unterhält. Jedes Element in der Liste hat einen Index. Auf jedes Element kann daher durch seinen Index zugegriffen werden, wobei der erste Index Null ist. Normalerweise ermöglichen Listen doppelte Elemente im Vergleich zu Sätzen, bei denen Elemente eindeutig sein müssen.
Über API. Da die Liste von der Sammlungsschnittstelle erbt, enthält sie natürlich alle funktionalen Schnittstellen in der Sammlung. Da die Liste eine bestellte Warteschlange ist, hat sie auch eine eigene API -Schnittstelle. Zu den wichtigsten gehören "Elemente hinzufügen, löschen, erhalten und ändern und im angegebenen Ort", "Subqueue in der Liste erhalten" usw.
// Sammlung Apiabspract boolean add (E -Objekt) Abstract Boolean Addall (Sammlung <? Erweitert E> Sammlung) Abstract void clear () Abstract Boolean enthält (Objektobjekt) Abstract Boolean enthält Objekt) Abstract Boolean Removeall (Sammlung <?> Sammlung) Abstract Boolean Retainall (Sammlung <?> Sammlung) Abstrakt int size () Abstract <T> T [] TOARRAY (T [] Array) Abstract Object [] toArray () // verglichen mit der Sammlung, der neuen API: Abstract Void Void Void Void addort (intacton). Standort) Abstract Int Indexof (Objektobjekt) Abstract int lastIndexof (Objektobjekt) Abstract ListIterator <E> Listiterator (int Ort) Abstract Listiterator <E> Listiterator () Abstract E Remove (int Ort) Abstract E -Set (intort, E -Objekt) Abstract List <E> Sublist (int start, int ende)
3. Einführung in Set
Das Set ist wie folgt definiert:
öffentliche Schnittstelle set <e> erweitert die Sammlung <E> {} Set ist eine Schnittstelle, die aus der Sammlung erbelt wird, dh Set ist auch eine Art Sammlung. SET ist eine Sammlung ohne doppelte Elemente.
Über API. Die API von SET ist genau das gleiche wie die Sammlung.
// set apiabract boolean add (e objekt) abstrakt boolean addall (collection <? Erweitert e> collection) abstraktes void clear () Abstract Boolean enthält (Objektobjekt) Abstract Boolean enthält Objekt) Abstract Boolean Removeall (Sammlung <?> Sammlung) Abstract Boolean Retainall (Sammlung <?> Sammlung) Abstract Int Size () Abstract <T> T [] TOARRAY (T [] Array) abstraktes Objekt [] toArray ()
4.. AbstractCollection
Die Definition von AbstractCollection lautet wie folgt:
public Abstract Class AbstractCollection <E> implementiert die Sammlung <E> {} AbstractCollection ist eine abstrakte Klasse, die Funktionen in der Sammlung außer Iterator () und size () implementiert.
Die Hauptfunktion von AbstractCollection: Sie implementiert die meisten Funktionen in der Sammlungsschnittstelle. Dies erleichtert andere Klassen, um die Sammlung wie ArrayList, LinkedList usw. zu implementieren. Wenn diese Klassen die Sammlungsschnittstelle implementieren möchten, wurden die meisten Schnittstellen durch Erben von AbstractCollection implementiert.
5. AbstractList
Die Definition von AbstractList lautet wie folgt:
public abstract class AbstractList <E> erweitert AbstractCollection <E> implementiert die Liste <E> {} AbstractList ist eine abstrakte Klasse, die die AbstractCollection erbt und die Listenschnittstelle implementiert. Es implementiert Funktionen in der Liste außer Size () und GET (int (intort).
Die Hauptfunktion von AbstractList: Sie implementiert die meisten Funktionen in der Listenschnittstelle. Dies erleichtert andere Klassen, um die Liste zu erben.
Darüber hinaus wird im Vergleich zu AbstractCollection die Schnittstelle iterator () in der Abstract -Klasse der Abstractlist implementiert.
6. AbstractSet
Die Definition von AbstractSet ist wie folgt: öffentliche Abstract -Klasse AbstractSet <E> erweitert AbstractCollection <e> implementiert Set <E> {} AbstractSet ist eine abstrakte Klasse, die die AbstractCollection erbt und die festgelegte Schnittstelle implementiert. Da die SET -Schnittstelle und die API in der Sammlungsschnittstelle genau gleich sind, hat SET keine eigene separate API. Wie abstractCollection implementiert es Funktionen in der Liste außer Iterator () und size ().
Die Hauptfunktion von AbstractSet: Sie implementiert die meisten Funktionen in der festgelegten Schnittstelle. Dies erleichtert andere Klassen, um festgelegte Schnittstellen zu implementieren.
7. Iterator
Die Definition des Iterators lautet wie folgt:
public interface iterator <e> {} Iterator ist eine Schnittstelle, die Iterator der Sammlung ist. Eine Sammlung kann durch die Elemente in der Sammlung über Iterator durchquert werden. Die von Iterator bereitgestellte API -Schnittstelle umfasst: ob das nächste Element existiert, das nächste Element erhalten und das aktuelle Element löschen.
Hinweis: Wenn Iterator die Sammlung durchquert, basiert sie auf dem fehlgeschlagenen Mechanismus. Das heißt, wenn ein bestimmter Thread A einen Set durch einen Iterator durchquert, wenn der Inhalt des Satzes durch andere Threads geändert wird; Wenn dann ein Set auf den Set zugreift, wird eine Ausnahme von ConcurrentModificationException ausgelöst, was zu einem fehlgeschnittenen Ereignis führt. In Bezug auf den detaillierten Inhalt des Fehlschlags werden wir dies speziell nach der Zusammenfassung der fehlgeschnittenen Erklärung erklären.
// iTerator -Apiabspraction boolean hasNext () Abstract e Next () Abstract Leere entfernen ()
8. Listiterator
Die Definition des Listiterators lautet wie folgt:
Öffentliche Schnittstelle Listiterator <E> erweitert Iterator <E> {} ListIterator ist eine Schnittstelle, die von Iterator geerbt wurde, bei der es sich um einen Warteschlangen -Iterator handelt. Speziell für die praktische Liste verwendet, kann es vorwärts/rückwärts -Durchfahrten bereitstellen. Im Vergleich zu Iterator fügt es API -Schnittstellen wie das Hinzufügen hinzu, ob das vorherige Element existiert und das vorherige Element erhalten.
// ListIterator's API// Inherited from Iterator's interface abstract boolean hasNext()abstract E next()abstract void remove()// Add API interface abstract void add(E object)abstract boolean hasPrevious()abstract int nextIndex()abstract E previous()abstract int previousIndex()abstract void set(E object)