„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Sammlungen

Sammlungen

Veröffentlicht am 10.08.2024
Durchsuche:149

Die Schnittstelle Collection definiert die allgemeinen Vorgänge für Listen, Vektoren, Stapel, Warteschlangen, Prioritätswarteschlangen und Sätze.

Das Java Collections Framework unterstützt zwei Arten von Containern:

  • Eine zum Speichern einer Sammlung von Elementen wird einfach als Sammlung bezeichnet.
  • Die andere zum Speichern von Schlüssel/Wert-Paaren wird als Map bezeichnet.

Karten sind effiziente Datenstrukturen zum schnellen Suchen eines Elements mithilfe eines Schlüssels. Hier sind die folgenden Sammlungen.

  • Setss speichern eine Gruppe nicht duplizierter Elemente.
  • Listens speichern eine geordnete Sammlung von Elementen.
  • Stacks speichert Objekte, die nach dem Last-in-First-out-Prinzip verarbeitet werden.
  • Warteschlangens speichern Objekte, die nach dem First-in-First-out-Prinzip verarbeitet werden.
  • PriorityQueues speichern Objekte, die in der Reihenfolge ihrer Prioritäten verarbeitet werden.

Die gemeinsamen Merkmale dieser Sammlungen werden in den Schnittstellen definiert und Implementierungen werden in konkreten Klassen bereitgestellt, wie in der Abbildung unten dargestellt.

Image description

Alle im Java Collections Framework definierten Schnittstellen und Klassen sind im Paket java.util gruppiert.

Das Design des Java Collections Framework ist ein hervorragendes Beispiel für die Verwendung von Schnittstellen, abstrakten Klassen und konkreten Klassen. Die Schnittstellen definieren das Framework. Die abstrakten Klassen stellen eine teilweise Implementierung bereit. Die konkreten Klassen implementieren die Schnittstellen mit konkreten Datenstrukturen. Die Bereitstellung einer abstrakten Klasse, die eine Schnittstelle teilweise implementiert, erleichtert dem Benutzer das Schreiben des Codes. Der Benutzer kann einfach eine konkrete Klasse definieren, die die abstrakte Klasse erweitert, anstatt alle Methoden in der Schnittstelle zu implementieren. Der Einfachheit halber werden abstrakte Klassen wie AbstractCollection bereitgestellt. Aus diesem Grund werden sie praktische abstrakte Klassen genannt.

Die Schnittstelle Collection ist die Root-Schnittstelle zum Bearbeiten einer Sammlung von Objekten. Die öffentlichen Methoden sind in der folgenden Abbildung aufgeführt. Die Klasse AbstractCollection stellt eine Teilimplementierung für die Schnittstelle Collection bereit. Es implementiert alle Methoden in Collection mit Ausnahme der Methoden add, size und iterator. Diese werden in entsprechenden konkreten Unterklassen implementiert.

Image description

Die Schnittstelle Collection bietet die grundlegenden Vorgänge zum Hinzufügen und Entfernen von Elementen in einer Sammlung. Die Methode add fügt der Sammlung ein Element hinzu. Die Methode addAll fügt alle Elemente in der angegebenen Sammlung zu dieser Sammlung hinzu. Die Methode remove entfernt ein Element aus der Sammlung. Die Methode removeAll entfernt die Elemente aus dieser Sammlung, die in der angegebenen Sammlung vorhanden sind. Die Methode retainAll behält die Elemente in dieser Sammlung bei, die auch in der angegebenen Sammlung vorhanden sind. Alle diese Methoden geben boolean zurück. Der Rückgabewert ist true, wenn die Sammlung durch die Methodenausführung geändert wird. Die Methode clear() entfernt einfach alle Elemente aus der Sammlung.

Die Methoden addAll, removeAll und retainAll ähneln den Mengenvereinigungs-, Differenz- und Schnittmengenoperationen.

Die Schnittstelle Collection bietet verschiedene Abfragevorgänge. Die Methode size gibt die Anzahl der Elemente in der Sammlung zurück. Die Methode contains prüft, ob die Sammlung das angegebene Element enthält. Die Methode containsAll prüft, ob die Sammlung alle Elemente in der angegebenen Sammlung enthält. Die Methode isEmpty gibt true zurück, wenn die Sammlung leer ist.

Die Schnittstelle Collection stellt die Methode toArray() bereit, die eine Array-Darstellung für die Sammlung zurückgibt.

Einige der Methoden in der Schnittstelle Collection können nicht in der konkreten Unterklasse implementiert werden. In diesem Fall würde die Methode java.lang.UnsupportedOperationException auslösen, eine Unterklasse von RuntimeException. Dies ist ein gutes Design, das Sie in Ihrem Projekt verwenden können. Wenn eine Methode in der Unterklasse keine Bedeutung hat, können Sie sie wie folgt implementieren:

public void someMethod() {
wirft eine neue UnsupportedOperationException
("Methode nicht unterstützt");
}

Der folgende Code zeigt ein Beispiel für die Verwendung der in der Schnittstelle Collection definierten Methoden.

package demo;
import java.util.*;

public class TestCollection {

    public static void main(String[] args) {
        ArrayList collection1 = new ArrayList();
        collection1.add("New York");
        collection1.add("Atlanta");
        collection1.add("Dallas");
        collection1.add("Madison");

        System.out.println("A list of cities in collection1:");
        System.out.println(collection1);

        System.out.println("\nIs Dallas in collection1? "   collection1.contains("Dallas"));

        collection1.remove("Dallas");
        System.out.println("\n"   collection1.size()   " cities are in collection1 now");

        Collection collection2 = new ArrayList();
        collection2.add("Seattle");
        collection2.add("Portland");
        collection2.add("Los Angeles");
        collection2.add("Atlanta");

        System.out.println("\nA list of cities in collection2:");
        System.out.println(collection2);

        ArrayList c1 = (ArrayList)(collection1.clone());
        c1.addAll(collection2);
        System.out.println("\nCities in collection1 or collection2: ");
        System.out.println(c1);

        c1 = (ArrayList)(collection1.clone());
        c1.retainAll(collection2);
        System.out.print("\nCities in collection1 and collection2: ");
        System.out.println(c1);

        c1 = (ArrayList)(collection1.clone());
        c1.removeAll(collection2);
        System.out.print("\nCities in collection1, but not in 2: ");
        System.out.println(c1);
    }

}

Eine Liste der Städte in Sammlung1:
[New York, Atlanta, Dallas, Madison]
Ist Dallas in Sammlung1? WAHR
3 Städte sind jetzt in Sammlung1
Eine Liste der Städte in Sammlung2:
[Seattle, Portland, Los Angeles, Atlanta]
Städte in Sammlung1 oder Sammlung2:
[New York, Atlanta, Madison, Seattle, Portland, Los Angeles, Atlanta]
Städte in Sammlung1 und Sammlung2: [Atlanta]
Städte in Sammlung 1, aber nicht in Sammlung 2: [New York, Madison]

Das Programm erstellt ein konkretes Sammlungsobjekt mit ArrayList (Zeile 7) und ruft die Methode contains der Schnittstelle Collection auf (Zeile 16), Remove-Methode (Zeile 18), size-Methode (Zeile 19), addAll-Methode (Zeile 31), retainAll-Methode (Zeile 36) und removeAll-Methode (Zeile 41).

Für dieses Beispiel verwenden wir ArrayList. Sie können zum Ersetzen jede konkrete Klasse von Collection wie HashSet, LinkedList, Vector und Stack verwenden ArrayList zum Testen dieser in der Schnittstelle Collection definierten Methoden.

Das Programm erstellt eine Kopie einer Array-Liste (Zeilen 30, 35, 40). Der Zweck besteht darin, die ursprüngliche Array-Liste intakt zu halten und ihre Kopie zum Ausführen der Operationen addAll, retainAll und removeAll zu verwenden.

Alle konkreten Klassen im Java Collections Framework implementieren die Schnittstellen java.lang.Cloneable und java.io.Serializable, mit Ausnahme von java.util.PriorityQueue implementiert die Schnittstelle Cloneable nicht. Somit können alle Instanzen von Cloneable mit Ausnahme von Prioritätswarteschlangen geklont werden und alle Instanzen von Cloneable können serialisiert werden.

Freigabeerklärung Dieser Artikel ist abgedruckt unter: https://dev.to/paulike/collections-3le7?1 Bei Verstößen wenden Sie sich bitte an [email protected], um ihn zu löschen
Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3