Heim  >  Artikel  >  Java  >  Sammlungen

Sammlungen

WBOY
WBOYOriginal
2024-07-17 08:51:37470Durchsuche

Die Collection-Schnittstelle definiert die allgemeinen Operationen 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 dient zum Speichern von Schlüssel/Wert-Paaren und wird als Map bezeichnet.

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

  • Setss speichern eine Gruppe nicht duplizierter Elemente.
  • Listes speichert eine geordnete Sammlung von Elementen.
  • Stapelns 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 speichert 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. Die abstrakten Klassen wie AbstractCollection werden der Einfachheit halber bereitgestellt. Aus diesem Grund werden sie praktische abstrakte Klassen genannt.

Die Collection-Schnittstelle 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 teilweise Implementierung 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 Collection-Schnittstelle 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 sich die Sammlung aufgrund der Methodenausführung ändert. Die Methode clear() entfernt einfach alle Elemente aus der Sammlung.

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

Die Collection-Schnittstelle 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() {
wirf eine neue UnsupportedOperationException
(„Methode nicht unterstützt“);
}

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

package demo;
import java.util.*;

public class TestCollection {

    public static void main(String[] args) {
        ArrayList<String> 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<String> 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<String> c1 = (ArrayList<String>)(collection1.clone());
        c1.addAll(collection2);
        System.out.println("\nCities in collection1 or collection2: ");
        System.out.println(c1);

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

        c1 = (ArrayList<String>)(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 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), Methode „remove“ (Zeile 18), Methode „size“ (Zeile 19), Methode „addAll“ (Zeile 31), Methode „retainAll“ (Zeile 36) und removeAll-Methode (Zeile 41). Für dieses Beispiel verwenden wir ArrayList. Sie können jede konkrete Klasse von Collection wie HashSet

,

LinkedList, Vector und Stack zum Ersetzen verwenden ArrayList zum Testen dieser in der Collection-Schnittstelle 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 von addAll-, retainAll- und removeAll

-Vorgängen 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

Cloneable-Schnittstelle nicht. Somit können alle Instanzen von Cloneable mit Ausnahme von Prioritätswarteschlangen geklont werden und alle Instanzen von Cloneable können serialisiert werden.

Das obige ist der detaillierte Inhalt vonSammlungen. 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