Heim >Java >javaLernprogramm >Analyse zweier spezieller Java-Containerklassen List und Set

Analyse zweier spezieller Java-Containerklassen List und Set

黄舟
黄舟Original
2016-12-17 11:12:491581Durchsuche

Containerklassen können die Programmiereffizienz und Programmierfähigkeiten erheblich verbessern. In Java2 wurden alle Container von Joshua Bloch von SUN Company neu gestaltet und die Funktionen der Containerklassenbibliothek erweitert.

Der Zweck der Java2-Containerklassenbibliothek besteht darin, „Objekte zu speichern“, die in zwei Kategorien unterteilt ist:

Sammlung ---- eine Reihe unabhängiger Elemente Normalerweise gehorchen diese Elemente bestimmten Regeln. List muss eine bestimmte Reihenfolge der Elemente beibehalten, während Set keine doppelten Elemente enthalten darf.

Map ---- eine Reihe von „Schlüssel-Wert-Paar“-Objekten, das heißt, ihre Elemente sind gepaarte Objekte. Die typischste Anwendung ist das Datenwörterbuch, und es gibt andere umfangreiche Anwendungen. Darüber hinaus kann Map ein Set bestehend aus allen seinen Schlüsseln und eine Collection bestehend aus allen seinen Werten oder ein Set bestehend aus seinen Schlüssel-Wert-Paaren zurückgeben und die mehrdimensionale Map auch wie ein Array erweitern, solange Jeder „Wert“ des Schlüssel-Wert-Paares in der Karte „Es ist nur eine Karte.“

1. Iterator

Ein Iterator ist ein Entwurfsmuster, ein Objekt, das Objekte in einer Sequenz durchlaufen und auswählen kann, ohne dass der Entwickler die zugrunde liegende Struktur der Sequenz verstehen muss. Iteratoren werden oft als „leichte“ Objekte bezeichnet, weil sie kostengünstig zu erstellen sind.

Die Iterator-Funktion in Java ist relativ einfach und kann sich nur in eine Richtung bewegen:

(1) Verwenden Sie die Methode iterator(), um den Container aufzufordern, einen Iterator zurückzugeben. Wenn die next()-Methode des Iterators zum ersten Mal aufgerufen wird, gibt sie das erste Element der Sequenz zurück.

(2) Verwenden Sie next(), um das nächste Element in der Sequenz abzurufen.

(3) Verwenden Sie hasNext(), um zu prüfen, ob noch Elemente in der Sequenz vorhanden sind.

(4) Verwenden Sie „remove()“, um das vom Iterator neu zurückgegebene Element zu löschen.

Iterator ist die einfachste Implementierung des für List entwickelten Java-Iterators. Er kann List in zwei Richtungen durchlaufen und auch Elemente aus List einfügen und löschen.

2. Funktionsmethoden von List

List(Schnittstelle): Die Reihenfolge ist das wichtigste Merkmal von List; sie stellt sicher, dass die spezifische Reihenfolge der Elemente beibehalten wird. List fügt der Collection viele Methoden hinzu und ermöglicht so das Einfügen und Entfernen von Elementen aus der List (nur für LinkedList empfohlen). Eine Liste kann einen ListIterator generieren, der zum Durchlaufen der Liste in zwei Richtungen und zum Einfügen und Löschen von Elementen aus der Mitte der Liste verwendet werden kann.

ArrayList: Liste implementiert durch Array. Es ermöglicht einen schnellen Direktzugriff auf Elemente, fügt jedoch sehr langsam Elemente in die Mitte der Liste ein und entfernt sie daraus. ListIterator sollte nur zum Durchlaufen von ArrayList von hinten nach vorne und nicht zum Einfügen und Löschen von Elementen verwendet werden, da dies viel teurer als LinkedList ist.

LinkedList: Der sequentielle Zugriff ist optimiert. Das Einfügen und Löschen in die Mitte der Liste ist nicht teuer, aber der wahlfreie Zugriff ist relativ langsam (stattdessen kann ArrayList verwendet werden). Es verfügt über die Methoden addFirst(), addLast(), getFirst(), getLast(), RemoveFirst(), RemoveLast(). Diese Methoden (in keiner Schnittstelle oder Basisklasse definiert) ermöglichen die Verwendung von LinkedList als Stack, Warteschlange und Verwenden Sie eine bidirektionale Warteschlange.

3. Funktionsmethoden von Set

Set(Schnittstelle): Jedes in Set gespeicherte Element muss eindeutig sein, da Set keine doppelten Elemente speichert. Das zum Set hinzugefügte Objekt muss die Methode equal() definieren, um die Einzigartigkeit des Objekts sicherzustellen. Set und Collection haben genau die gleiche Schnittstelle. Die Set-Schnittstelle garantiert nicht, dass die Reihenfolge der Elemente beibehalten wird.

HashSet: Set für schnelle Suche. In HashSet gespeicherte Objekte müssen hashCode() definieren.

TreeSet: Ein Set, das die Ordnung aufrechterhält, mit einer Baumstruktur am unteren Rand. Verwenden Sie es, um eine geordnete Sequenz aus einem Set zu extrahieren.

LinkedHashSet: Hat die Abfragegeschwindigkeit von HashSet und verwendet intern eine verknüpfte Liste, um die Reihenfolge der Elemente (die Einfügungsreihenfolge) beizubehalten. Wenn Sie also einen Iterator zum Durchlaufen der Menge verwenden, werden die Ergebnisse in der Reihenfolge angezeigt, in der die Elemente eingefügt wurden.

HashSet verwendet die Hash-Funktion zum Sortieren von Elementen, die speziell für schnelle Abfragen entwickelt wurde. TreeSet verwendet die rot-schwarze Baumdatenstruktur zum Sortieren von Elementen. LinkedHashSet verwendet intern Hash, um die Abfrage zu beschleunigen Reihenfolge seiner Elemente, sodass es den Anschein hat, als wären die Elemente in der Einfügereihenfolge gespeichert. Es ist zu beachten, dass Set beim Generieren Ihrer eigenen Klasse die Speicherreihenfolge der Elemente beibehalten muss, daher die Comparable-Schnittstelle implementieren und die Methode CompareTo () definieren muss.

Das Obige ist die Analyse zweier spezieller Java-Containerklassen, List und Set. Weitere verwandte Artikel finden Sie auf der chinesischen PHP-Website (www.php.cn)!


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