Einführung

Fast jedes Programm muss einen bestimmten Datensatz speichern. Es können Zeichenfolgen und Zahlen, Objekte usw. sein. Arrays sind eine hervorragende Speicherlösung. Arrays unterliegen jedoch bestimmten Einschränkungen. Beispielsweise ist ihre Größe festgelegt, Elemente können nicht entfernt werden und Sie können keine Elemente in der Mitte einfügen. Um diese und andere Einschränkungen zu umgehen, wurden Sammlungen erstellt. Alle Arten von Sammlungen (und davon gibt es viele, wie wir später in dieser Lektion sehen werden) haben die Möglichkeit, ihre Größe dynamisch zu ändern. Einige Sammlungstypen können geordnete Elemente speichern und neue Elemente beim Hinzufügen automatisch ordnen.

In dieser Lektion machen wir uns mit der Klassenhierarchie der Basissammlungen im Java Collections Framework vertraut . Darüber hinaus gibt es verschiedene alternative Bibliotheken, die die Fähigkeiten des standardmäßigen Java Collections Framework erweitern . Das beliebteste davon ist Guava (Google Collections Library).

*Nicht alle Schnittstellen und Klassen sind im Diagramm dargestellt. Einige wurden aus Gründen der besseren Verständlichkeit weggelassen.

Grundlegende Schnittstellen

Das Diagramm zeigt, dass es zwei grundlegende Schnittstellen gibt, die implementiert werden, um die restlichen Klassen und Schnittstellen zu bilden.

Werfen wir einen Blick auf diese Schnittstellen:

  1. Sammlung – Eine gewöhnliche Sammlung, die eine Reihe von Elementen (Objekten) enthält. Diese Sammlung verfügt über grundlegende Methoden für die Arbeit mit Elementen: Einfügen ( add , addAll ), entfernen ( remove , removeAll , clear ), suchen ( enthält , enthältAll ), prüfen, ob die Sammlung leer ist ( isEmpty ), und Größe abrufen ( size ).

  2. Karte – Eine Sammlung, die als Schlüssel-Wert-Paare strukturiert ist. Darüber hinaus ist jeder Schlüssel in einer Map einzigartig: Keine zwei Schlüssel haben identische Werte. Diese Sammlung wird manchmal als Wörterbuch bezeichnet . Map ist eine separate Schnittstelle. Es implementiert nicht die Collection- Schnittstelle, sondern ist Teil des Java Collections Framework .

Nützliche Methoden zum Arbeiten mit Elementen in einer Karte :

  • einfügen ( put , putAll )

  • get ( get , keySet , Values ​​, EntrySet )

  • entfernen ( entfernen , löschen )

  • Suche ( enthält Schlüssel , enthält Wert )

  • Überprüfen Sie, ob die Sammlung leer ist ( isEmpty )

  • Größe ermitteln ( Größe )

Lassen Sie uns nun mehr über jeden von ihnen sprechen.

Sammlungsschnittstelle

Die Collection- Schnittstelle erweitert die Iterable- Schnittstelle, die über eine einzige Methode verfügt: iterator() . Für uns bedeutet dies, dass jede Sammlung, die Iterable erbt , einen Iterator zurückgeben kann.

Ein Iterator ist ein spezielles Objekt, mit dem Sie unabhängig von der spezifischen Implementierung auf die Elemente einer beliebigen Sammlung zugreifen können.

Die Abbildung zeigt, dass drei Schnittstellen die Collection- Schnittstelle erben : List , Queue und Set . Jetzt schauen wir uns jeden einzelnen kurz an.

Liste ist eine geordnete Sammlung, die doppelte Werte zulässt. Eine Besonderheit einer Liste besteht darin, dass ihre Elemente nummeriert sind und über eine Nummer (Index) auf sie zugegriffen werden kann.

Eine Warteschlange speichert Elemente in der Reihenfolge, in der sie der Warteschlange hinzugefügt wurden.

Im Gegensatz zu einer Liste stellt ein Set eine ungeordnete Sammlung dar, die keine wiederholten Elemente zulässt. Die Set- Schnittstelle entspricht dem Konzept einer mathematischen Menge .

Implementierungen der Map-Schnittstelle

Wir können sehen, dass die Map- Schnittstelle eine Zuordnung zwischen eindeutigen Schlüsseln und Werten darstellt.


interface Map<K, V>

Dabei ist K der Typ der Schlüssel und V der Typ der gespeicherten Werte.

Mithilfe eines Schlüssels können wir Daten aus einer Map extrahieren . Um ein Element zu einer Map hinzuzufügen , müssen wir einen Schlüssel und einen Wert angeben.

Schauen wir uns einige Implementierungen von Map an :

  1. HashMap ist eine Implementierung von Map , die auf Hash-Tabellen basiert. Es kann Schlüssel und Werte jedes Typs speichern, einschließlich null . Die Reihenfolge der Elemente ist nicht garantiert.

  2. LinkedHashMap ist eine Datenstruktur, die Daten als verknüpfte Liste von Elementen speichert. Die Elemente werden in der Reihenfolge in der Liste angezeigt, in der sie hinzugefügt wurden.

  3. TreeMap implementiert die SortedMap- Schnittstelle (über die NavigableMap- Schnittstelle). Die Elemente in dieser Struktur werden in sortierter Reihenfolge gespeichert (wenn ein neues Element hinzugefügt wird, wird die Sammlung automatisch sortiert). TreeMap eignet sich hervorragend zum Speichern großer Mengen sortierter Daten mit schnellem Abruf.

Veraltete Sammlungen:

Java verfügt über veraltete Sammlungen aus früheren Versionen (um die Abwärtskompatibilität aufrechtzuerhalten). Diese alten Sammlungen sollten nicht in neuem Code verwendet werden:

  • Aufzählung – analog zur Iterator- Schnittstelle;

  • Vektor – eine geordnete Liste von Elementen und analog zur ArrayList- Klasse;

  • Stack – eine Implementierung der Stack-Datenstruktur, die Elemente speichert und manipuliert, etwa wie Sie mit einem Stapel Bücher interagieren würden. Es gibt Methoden zum Hinzufügen von Elementen zum Stapel ( push ) und zum Entfernen von Elementen ( pop );

  • Dictionary – analog zur Map- Schnittstelle, aber es ist eine abstrakte Klasse;

  • Hashtable – analog zu HashMap .

Weitere Informationen zum Collections Framework finden Sie in diesem Artikel .