1. Container und Sammlungen

Container oder Sammlungen sind Klassen, mit denen Sie mehrere Objekte gleichzeitig speichern und verarbeiten können. Sie kennen bereits zwei Arten von Containern: Arrays und Listen.

Java verfügt über mehrere Dutzend Sammlungen, von denen jede Elemente auf ihre eigene Art speichert. Hier sind einige davon:

Sammlung Klasse Beschreibung
List
ArrayList
Aufführen
LinkedList
Verlinkte Liste
Vector
Vektor
Stack
Stapel
Set
HashSet
Satz
TreeSet
LinkedHashSet
Queue
PriorityQueue
Warteschlange
ArrayQueue
Map
HashMap
Karte/Wörterbuch
TreeMap
HashTable

Die Namen sind hier etwas mehrdeutig. In den meisten Programmiersprachen werden alle diese Datenstrukturen Sammlungen genannt, in Java jedoch nicht. In Java implementieren einige dieser Klassen die CollectionSchnittstelle, andere nicht.

Dementsprechend werden Sammlungen in Sammlungen im weiteren Sinne und Sammlungen im engeren Sinne (nur solche, die die CollectionSchnittstelle implementieren) unterteilt.

Um Verwirrung zu vermeiden, meinen wir, wenn wir von Sammlungen sprechen , im engeren Sinne des Wortes, also Klassen, die die CollectionSchnittstelle implementieren. Die Typen List, Setund Queuesind alle Sammlungen. Sammlungen im weiteren Sinne werden im Allgemeinen als Container bezeichnet . Dazu gehören Typen wie Mapund Arrays.


2. HashSetSammlung

Die HashSetKlasse ist eine typische Set-Sammlung. In vielerlei Hinsicht ähnelt es der ArrayListKlasse. In mancher Hinsicht handelt es sich um eine primitivere Version.

Sie können ein HashSetObjekt mit einer Anweisung wie der folgenden erstellen:

HashSet<Type> name = new HashSet<Type>();

Wo Typeist der Typ der Elemente, die wir in der HashSetSammlung speichern werden?

Die HashSetKlasse verfügt über Methoden wie diese:

Methode Beschreibung
void add(Type value)
Fügt das valueElement der Sammlung hinzu
boolean remove(Type value)
Entfernt das valueElement aus der Sammlung.
Gibt zurück true, wenn ein solches Element vorhanden war
boolean contains(Type value)
valueÜberprüft, ob die Sammlung ein Element enthält
void clear()
Löscht die Sammlung und entfernt alle Elemente
int size()
Gibt die Anzahl der Elemente in der Sammlung zurück

Hier ist ein Beispiel für die Verwendung eines Sets.

Schreiben wir ein Programm, das sich vom Benutzer verabschiedet, wenn er oder sie Hallo sagt. Um es interessanter zu machen, geben wir unserem Programm die Möglichkeit, „Hallo“ in mehreren Sprachen zu verstehen.

Code Notiz
HashSet<String> set = new HashSet<String>();

set.add("Hallo");
set.add("Hello");
set.add("Hola");
set.add("Bonjour");
set.add("Ciao");
set.add("Namaste");

Scanner console = new Scanner(System.in);
String str = console.nextLine();

if (set.contains(str))
   System.out.println("Goodbye!");
Erstellen Sie ein HashSetObjekt, das Elemente speichert String.


Wir fügen der Variablen Begrüßungen in verschiedenen Sprachen hinzu set.




Lesen Sie eine Zeile von der Konsole.


Wenn die Zeichenfolge in unserem Grußsatz enthalten ist, verabschieden wir uns.


3. Einstellen

Die SetSammlung ist für die Aufnahme einer Reihe von Elementen konzipiert. Deshalb heißt es a Set(set). Diese Sammlung verfügt über drei Funktionen.

Operationen an einer Menge

Mit einer Menge können Sie nur drei Dinge tun: Elemente zur Menge hinzufügen, Elemente aus der Menge entfernen und prüfen, ob die Menge ein bestimmtes Element enthält. Das ist es.

Keine Bestellung

Elemente in dieser Sammlung haben keine Indizes. Sie können ein Element nicht über einen Index abrufen oder einen Wert in eine Sammlung an einem bestimmten Index schreiben. Eine Menge hat keine get()und set()Methoden.

Einzigartige Elemente

Alle Elemente in einem Set sind einzigartig. Im Gegensatz zu einer Liste kann eine Menge nur eine Instanz eines Elements enthalten. Ein Objekt ist entweder in der Menge enthalten oder nicht – es gibt keine dritte Option. Sie können Schwarz nicht dreimal zu einer Farbpalette hinzufügen. Entweder ist es da oder es ist nicht da.

Elemente finden

Wenn Sie ein neues Element hinzufügen, ein Element entfernen oder überprüfen, ob ein Element in einer Menge vorhanden ist, wird in der Methode eine Suche nach dem Element durchgeführt. Das übergebene Element wird zuerst von mit den Elementen der Sammlung verglichen hashCode(), und dann, wenn die von zurückgegebenen Werte übereinstimmen hashCode(), von equals().



4. Sammlungen vergleichen: ListvsSet

Vergleichen wir zwei Arten von Sammlungen: Listund SetWir betrachten die Hauptunterschiede, wenn eine vorteilhafter ist als die andere und umgekehrt.

Versuchen wir, List und Set am Beispiel von Spielzeug zu vergleichen.

Die List(Listen-)Sammlung ist wie eine Reihe von Spielzeugen, die in einem Spielzimmer an der Wand angeordnet sind. Am Ende der Liste können Sie ein Spielzeug hinzufügen. Wenn es wirklich nötig ist, können Sie es auch in der Mitte einsetzen (einige der vorhandenen Spielsachen müssen dann allerdings verschoben werden).

Jedes Spielzeug hat einen Index. Sie können ein Spielzeug über seinen Index referenzieren und auch Spielzeug Nummer 7 durch Spielzeug Nummer 13 ersetzen. Sie können Spielzeug Nummer 4 aus der Liste entfernen. Schließlich können Sie den Index jedes Spielzeugs in der Liste erfahren.

Die Set(Set-)Sammlung gleicht eher einem Stapel Spielzeug in der Mitte des Bodens. Sie können ein Spielzeug zum Stapel hinzufügen und ein Spielzeug vom Stapel entfernen. Diesen Spielzeugen ist jedoch kein fester Index zugeordnet.

Oder nehmen Sie an, Sie suchen sich ein Spielzeug für den Geburtstag Ihres Kindes aus. Überlegen Sie zunächst, ob er das Spielzeug bereits hat. Alle Spielzeuge, die er bereits hat, bilden eine Reihe von Spielzeugen, die Sie nicht kaufen möchten.

Aus dieser Sicht können Sie sehen, dass die Reihenfolge der Spielzeuge in einer Reihe von „bereits vorhandenen Spielzeugen“ keine Rolle spielt, und es spielt auch keine Rolle, ob das Geburtstagskind zwei Instanzen eines bestimmten Spielzeugs hat. Die Reihenfolge oder Anzahl der einzelnen Spielzeuge interessiert Sie nicht. Was Ihnen wichtig ist, ist, jedes einzigartige Spielzeug zu kennen, das im Set vorhanden ist.

Für solche Fälle benötigen Sie die SetSammlung. Die beliebteste Implementierung ist die HashSetKlasse.