Industrielle Fertigung
Industrielles Internet der Dinge | Industrielle Materialien | Gerätewartung und Reparatur | Industrielle Programmierung |
home  MfgRobots >> Industrielle Fertigung >  >> Industrial programming >> Java

Java Collections meistern: Umfassender Leitfaden für effiziente Datenstrukturen

Einführung in das Collections Framework

Vor Java 2 bot Java ad-hoc-Klassen wie Dictionary, Vector, Stack und Properties an, um Gruppen von Objekten zu speichern und zu manipulieren. Obwohl diese Klassen recht nützlich waren, fehlte ihnen ein zentrales, vereinheitlichendes Thema. Daher war die Art und Weise, wie Sie Vector verwendeten, anders als die Art und Weise, wie Sie Properties verwendeten.

  • Das Framework musste hochperformant sein. Die Implementierungen für die fundamentalen Collections (dynamische Arrays, verkettete Listen, Bäume und Hashtables) sollten hocheffizient sein.
  • Das Framework musste erlauben, dass verschiedene Arten von Collections auf ähnliche Weise und mit einem hohen Grad an Interoperabilität funktionieren.
  • Das Framework musste eine Collection einfach erweitern und/oder anpassen können.

Zu diesem Zweck ist das gesamte Collections Framework um einen Satz standardisierter Interfaces herum entworfen. Mehrere Standardimplementierungen wie LinkedList, HashSet und TreeSet dieser Interfaces werden bereitgestellt, die Sie so wie sie sind verwenden können, und Sie können auch Ihre eigene Collection implementieren, wenn Sie dies wünschen.

Ein Collections Framework ist eine vereinheitlichte Architektur zur Repräsentation und Manipulation von Collections. Alle Collections Frameworks enthalten Folgendes:

  • Interfaces – Dies sind abstrakte Datentypen, die Collections repräsentieren. Interfaces erlauben es, Collections unabhängig von den Details ihrer Repräsentation zu manipulieren. In objektorientierten Sprachen bilden Interfaces im Allgemeinen eine Hierarchie.
  • Implementierungen (Klassen) – Dies sind die konkreten Implementierungen der Collection-Interfaces. Im Wesentlichen sind es wiederverwendbare Datenstrukturen.
  • Algorithmen – Dies sind die Methoden, die nützliche Berechnungen wie Suchen und Sortieren auf Objekten durchführen, die Collection-Interfaces implementieren. Die Algorithmen sollen polymorph sein: Das heißt, dieselbe Methode kann auf vielen verschiedenen Implementierungen des entsprechenden Collection-Interfaces verwendet werden.

Zusätzlich zu Collections definiert das Framework mehrere Map-Interfaces und -Klassen. Maps speichern Schlüssel/Wert-Paare. Obwohl Maps im eigentlichen Sinne des Begriffs keine Collections sind, sind sie vollständig in Collections integriert.

Die Collection-Interfaces

Das Collections Framework definiert mehrere Interfaces. Dieser Abschnitt bietet einen Überblick über jedes Interface:

Nr.Interface & Beschreibung
1The Collection Interface – Ermöglicht die Arbeit mit Gruppen von Objekten; es steht an der Spitze der Collections-Hierarchie.
2The List Interface – Erweitert Collection und eine Instanz von List speichert eine geordnete Sammlung von Elementen.
3The Set – Erweitert Collection, um Mengen (Sets) zu handhaben, die eindeutige Elemente enthalten müssen.
4The SortedSet – Erweitert Set, um sortierte Mengen zu handhaben.
5The Map – Ordnet eindeutige Schlüssel Werten zu.
6The Map.Entry – Beschreibt ein Element (ein Schlüssel/Wert-Paar) in einer Map. Dies ist eine innere Klasse von Map.
7The SortedMap – Erweitert Map, sodass die Schlüssel in aufsteigender Reihenfolge gehalten werden.
8The Enumeration – Dies ist ein Legacy-Interface, das die Methoden definiert, mit denen Sie die Elemente in einer Sammlung von Objekten aufzählen (einzeln erhalten) können. Dieses Legacy-Interface wurde durch Iterator ersetzt.

Die Collection-Klassen

Java bietet eine Reihe von Standard-Collection-Klassen an, die Collection-Interfaces implementieren. Einige der Klassen bieten vollständige Implementierungen, die so wie sie sind verwendet werden können, und andere sind abstrakte Klassen, die skelettartige Implementierungen bereitstellen, die als Ausgangspunkte für die Erstellung konkreter Collections verwendet werden.

Die Standard-Collection-Klassen sind in der folgenden Tabelle zusammengefasst:

Nr.Klasse & Beschreibung
1AbstractCollection – Implementiert den größten Teil des Collection-Interfaces.
2AbstractList – Erweitert AbstractCollection und implementiert den größten Teil des List-Interfaces.
3AbstractSequentialList – Erweitert AbstractList für die Verwendung durch eine Collection, die sequenziellen statt zufälligen Zugriff auf ihre Elemente verwendet.
4LinkedList – Implementiert eine verkettete Liste, indem AbstractSequentialList erweitert wird.
5ArrayList – Implementiert ein dynamisches Array, indem AbstractList erweitert wird.
6AbstractSet – Erweitert AbstractCollection und implementiert den größten Teil des Set-Interfaces.
7HashSet – Erweitert AbstractSet für die Verwendung mit einer Hashtable.
8LinkedHashSet – Erweitert HashSet, um Insertion-Order-Iterationen zu ermöglichen.
9TreeSet – Implementiert ein in einem Baum gespeichertes Set. Erweitert AbstractSet.
10AbstractMap – Implementiert den größten Teil des Map-Interfaces.
11HashMap – Erweitert AbstractMap, um eine Hashtable zu verwenden.
12TreeMap – Erweitert AbstractMap, um einen Baum zu verwenden.
13WeakHashMap – Erweitert AbstractMap, um eine Hashtable mit schwachen Schlüsseln zu verwenden.
14LinkedHashMap – Erweitert HashMap, um Insertion-Order-Iterationen zu ermöglichen.
15IdentityHashMap – Erweitert AbstractMap und verwendet Referenzgleichheit beim Vergleichen von Dokumenten.

Die Klassen AbstractCollection, AbstractSet, AbstractList, AbstractSequentialList und AbstractMap bieten skelettartige Implementierungen der Kern-Collection-Interfaces, um den Aufwand für deren Implementierung zu minimieren.

Die folgenden Legacy-Klassen, die von java.util definiert wurden, wurden im vorherigen Kapitel besprochen:

Nr.Klasse & Beschreibung
1Vector – Implementiert ein dynamisches Array. Es ist ähnlich wie ArrayList, aber mit einigen Unterschieden.
2Stack – Stack ist eine Unterklasse von Vector, die einen Standard-Last-In-First-Out-Stack implementiert.
3Dictionary – Dictionary ist eine abstrakte Klasse, die ein Schlüssel/Wert-Speicher-Repository repräsentiert und ähnlich wie Map funktioniert.
4Hashtable – Hashtable war Teil des ursprünglichen java.util und ist eine konkrete Implementierung eines Dictionary.
5Properties – Properties ist eine Unterklasse von Hashtable. Sie wird verwendet, um Listen von Werten zu verwalten, bei denen der Schlüssel ein String und der Wert ebenfalls ein String ist.
6BitSet – Eine BitSet-Klasse erstellt einen speziellen Array-Typ, der Bit-Werte enthält. Dieser Array kann bei Bedarf an Größe zunehmen.

Die Collection-Algorithmen

Das Collections Framework definiert mehrere Algorithmen, die auf Collections und Maps angewendet werden können. Diese Algorithmen sind als statische Methoden innerhalb der Collections-Klasse definiert.

Mehrere der Methoden können eine ClassCastException werfen, die auftritt, wenn ein Versuch unternommen wird, inkompatible Typen zu vergleichen, oder eine UnsupportedOperationException, die auftritt, wenn ein Versuch unternommen wird, eine unveränderliche Collection zu modifizieren.

Collections definieren drei statische Variablen: EMPTY_SET, EMPTY_LIST und EMPTY_MAP. Alle sind unveränderlich (immutable).

Nr.Algorithmus & Beschreibung
1The Collection Algorithms – Hier ist eine Liste aller Algorithmus-Implementierungen.

Wie verwendet man einen Iterator?

Oft möchten Sie durch die Elemente in einer Collection iterieren. Zum Beispiel möchten Sie möglicherweise jedes Element anzeigen.

Der einfachste Weg, dies zu tun, ist die Verwendung eines Iterators, der ein Objekt ist, das entweder das Iterator- oder das ListIterator-Interface implementiert.

Iterator ermöglicht es Ihnen, durch eine Collection zu iterieren, Elemente zu erhalten oder zu entfernen. ListIterator erweitert Iterator, um bidirektionales Durchlaufen einer Liste und die Modifikation von Elementen zu ermöglichen.

Nr.Iterator-Methode & Beschreibung
1Using Java Iterator – Hier ist eine Liste aller Methoden mit Beispielen, die von den Iterator- und ListIterator-Interfaces bereitgestellt werden.

Wie verwendet man einen Comparator?

Sowohl TreeSet als auch TreeMap speichern Elemente in sortierter Reihenfolge. Es ist jedoch der Comparator, der genau definiert, was sortierte Reihenfolge bedeutet.

Dieses Interface ermöglicht es uns, eine gegebene Collection auf beliebig viele verschiedene Arten zu sortieren. Auch kann dieses Interface verwendet werden, um Instanzen beliebiger Klassen zu sortieren (sogar Klassen, die wir nicht modifizieren können).

Nr.Comparator-Methode & Beschreibung
1Using Java Comparator – Hier ist eine Liste aller Methoden mit Beispielen, die vom Comparator-Interface bereitgestellt werden.

Zusammenfassung

Das Java Collections Framework gibt dem Programmierer Zugriff auf vorgefertigte Datenstrukturen sowie Algorithmen zu deren Manipulation.

Eine Collection ist ein Objekt, das Referenzen auf andere Objekte halten kann. Die Collection-Interfaces deklarieren die Operationen, die auf jedem Collection-Typ ausgeführt werden können.

Die Klassen und Interfaces des Collections Frameworks befinden sich im Paket java.util.

Java

  1. Java Operatoren meistern: Typen, Syntax und praktische Beispiele
  2. Java Kommentare: Typen, Verwendung und Best Practices
  3. Java Enhanced For-Schleife meistern: Syntax, Beispiele und Best Practices
  4. Java Strings meistern: Erstellung, Methoden und Best Practices
  5. Java-Schnittstellen meistern: Konzepte, Implementierung und Best Practices
  6. Java anonyme innere Klassen meistern: Definition, Syntax und praktische Beispiele
  7. Java Try-With-Resources meistern: Automatisches Ressourcenmanagement erklärt
  8. Java Annotations erklärt: Typen, Platzierung und praktische Beispiele
  9. Java Assertions: Praktischer Leitfaden zur Fehlererkennung und Code-Reliabilität
  10. C# Collections meistern: Praktisches Tutorial mit Real-World-Beispielen