Die Liste Interface (Die Java - Tutorials - Sammlungen - Schnittstellen)

  • Positional Zugang # 151; manipuliert auf ihre numerische Position in der Liste Basis-Elemente. Dazu gehören Methoden wie bekommen. Set. hinzufügen. füge alle Hinzu. und entfernen.
  • Suche # 151; sucht nach einem bestimmten Objekt in der Liste und gibt seine numerische Position. Suchmethoden umfassen indexOf und lastIndexOf.
  • Iteration # 151; erstreckt Iterator Semantik Vorteil der Liste der sequentiellen Natur zu nehmen. Die ListIterator Methoden bieten dieses Verhalten.
  • Range-Ansicht # 151; Die sublist Methode führt beliebige Bereich Operationen auf der Liste.

Die Java-Plattform enthält zwei Allzweck- Liste Implementierungen. Anordnungsliste. das ist in der Regel mit der besseren Leistung Implementierung und LinkedList, die eine bessere Leistung unter bestimmten Umständen bietet.

Sammlung Operationen

Die Operationen von Sammlung geerbt alles tun, über das, was man erwarten würde, sie zu tun, vorausgesetzt, Sie sind mit ihnen bereits vertraut sind. Wenn Sie kommen mit ihnen aus Sammlung nicht vertraut. Jetzt wäre ein guter Zeitpunkt sein, um den Collection-Schnittstelle Abschnitt zu lesen. Die Entfernungsoperation entfernt immer das erste Vorkommen des angegebenen Elements aus der Liste. Das Add und addAll Operationen hängen Sie immer das neue Element (e) bis zum Ende der Liste. So verknüpft das folgende Idiom eine Liste in einer anderen.

Hier ist eine nicht-destruktive Form dieses Idioms, die eine dritte Liste erzeugt, bestehend aus der zweiten Liste an den ersten angehängt.

Beachten Sie, dass das Idiom, in seiner nicht-destruktiven Form, unter Ausnutzung der Arraylist ‚s Standard Konvertierungskonstruktor nimmt.

Und hier ist ein Beispiel (JDK 8 und höher), die einige Namen in eine Liste aggregiert.

Wie die Set-Schnittstelle, stärkt Liste die Anforderungen an den equals und hashCode Methoden, so dass zwei Listenobjekte können für logische Gleichheit ohne Rücksicht auf ihre Implementierungsklassen verglichen werden. Zwei Liste Objekte sind gleich, wenn sie dieselben Elemente in der gleichen Reihenfolge enthalten.

Positional Zugangs- und Suchoperationen

Die grundlegenden Positionszugriffsoperationen sind erhalten. Set. hinzufügen und entfernen. (Der Satz und entfernen Operationen zurückkehren den alten Wert, der überschrieben oder gelöscht wird.) Andere Operationen (indexOf und lastIndexOf) geben die ersten oder letzten Index des angegebenen Element in der Liste.

Die addAll Betrieb fügt alle Elemente der angegebenen Sammlung an der angegebenen Position beginnt. Die Elemente werden in der Reihenfolge eingefügt sie durch die angegebene Collection ‚s Iterator zurückgeführt werden. Dieser Aufruf ist die Positions Zugang analog der Collection ‚s addAll Betrieb.

Hier ist eine kleine Methode zwei indizierte Werte in einer Liste zu tauschen.

Natürlich ist es ein großer Unterschied. Dies ist ein polymorpher Algorithmus: Es tauscht zwei Elemente in jeder Liste. unabhängig von ihrer Implementierung Art. Hier ist ein weiterer polymorpher Algorithmus, der die vorhergehenden Swap-Methode verwendet.

Dieser Algorithmus, der in der Java-Plattform Kollektionen Klasse enthalten ist, zufällig permutiert die angegebene Liste der angegebenen Quelle der Zufälligkeit verwenden. Es ist ein wenig subtiler: Es wird mit der Liste von unten nach oben, wiederholt ein zufällig ausgewählten Elemente in die aktuelle Position tauschen. Anders als die meisten naiven Versuche schlurfende, dann ist es fair (alle Permutationen auftreten mit gleicher Wahrscheinlichkeit, eine unvoreingenommene Zufallsquelle vorausgesetzt) ​​und schnell (erfordert genau list.size () - 1-Swaps). Das folgende Programm verwendet diesen Algorithmus, um die Worte in der Argumentliste in zufälliger Reihenfolge zu drucken.

In der Tat kann dieses Programm gemacht wird, noch kürzer und schneller. Die Klasse Arrays hat eine statische Factory-Methode namens asList. das ermöglicht eine Anordnung in Form einer Liste angezeigt werden. Diese Methode kopiert nicht das Array. Änderungen in der Liste Schreiben auf das Array durch und umgekehrt. Die daraus resultierende Liste ist keine Allzweck Liste Implementierung, da es nicht die (optional) hinzufügen und entfernen Operationen nicht implementiert: Arrays ist nicht veränderbar. Unter Ausnutzung des Arrays.asList und die Bibliothek Version von Shuffle aufrufen. die eine Standardzufallsquelle verwendet, erhalten Sie das folgende kleine Programm, dessen Verhalten zum vorherigen Programm identisch ist.

Wie zu erwarten war, kehrte der Iterator von List ‚s Iterator Operation liefert die Elemente der Liste in der richtigen Reihenfolge. Liste stellt auch einen reichen Iterator, genannt ListIterator. die Ihnen erlaubt, die Liste in beiden Richtungen zu durchlaufen, ändern Sie die Liste während der Iteration, und erhalten die aktuelle Position des Iterators.

Die drei Methoden, die ListIterator von Iterator erbt (hasNext. Nächste. Und entfernen) tun genau das Gleiche in beiden Schnittstellen. Die hasPrevious und die vorherigen Operationen sind genau Analoga von hasNext und anderen. Die früheren Operationen beziehen sich auf das Element vor dem (impliziten) cursor, während letztere auf das Element nach dem Cursor beziehen. Der vorherige Vorgang bewegt die Cursor nach hinten, während der nächsten bewegt es vorwärts.

Hier ist das Standard-Idiom für rückwärts durch eine Liste iterieren.

Beachten Sie, das Argument zu ListIterator im vorhergehenden Idiom. Die Liste Schnittstelle hat zwei Formen der ListIterator Methode. Die Form ohne Argumente liefert einen ListIterator am Anfang der Liste positioniert ist; Die Form mit einem int-Argumente gibt einen ListIterator am angegebenen Index positioniert ist. Der Index bezieht sich auf das Element, das durch einen anfänglichen Anruf zum nächsten zurückgeführt werden würde. Ein anfänglicher Aufruf zum vorherigen zurückkehren würde, das Element, dessen Index war Index-1. In einer Liste der Länge n. es gibt n + 1 gültige Werte für den Index. von 0 bis n. inklusive.

Anschaulich gesprochen ist der Cursor immer zwischen zwei Elementen # 151; derjenige, der durch einen Aufruf zum vorherigen und die, die zurückgeschickt werden würden durch einen Aufruf zum nächsten zurückgeführt werden würde. Die n + 1 gültigen Indexwerte entsprechen die n + 1 Zwischenräume zwischen den Elementen, aus dem Zwischenraum vor dem ersten Elemente in die Lücke nach dem letzten. Die folgende Abbildung zeigt die fünf möglichen Cursorpositionen in einer Liste mit vier Elementen.

Die fünf möglichen Cursorpositionen.

Anrufe zum nächsten und vorherigen können miteinander vermischt werden, aber man muss ein bisschen vorsichtig sein. Der erste Aufruf zum vorherigen kehrt das gleiche Element wie der letzten Aufruf zum nächsten. In ähnlicher Weise der erste Aufruf zum nächsten nach einer Folge von Anrufen zur vorherigen kehrt das gleiche Element wie das letzte Aufruf zur vorherigen.

Es sollte nicht überraschen, dass die Methode nextindex den Index des Elements zurück, das durch einen nachfolgenden Aufruf zurückgegeben werden würde zum nächsten. und previousIndex gibt den Index des Elements, das von einem nachfolgenden Aufruf zum vorherige zurückgeführt werden würde. Diese Anrufe werden typischerweise entweder die Position zu berichten, wo etwas gefunden wurde oder die Position des ListIterator aufzuzeichnen, so dass eine andere ListIterator mit identischen Position erstellt werden kann.

Es sollte auch nicht überraschen, dass die Zahl zurück von nextindex ist immer um eins größer als die Anzahl zurück von previousIndex. Dies bedeutet, das Verhalten der zwei Grenzfälle: (1) einen Anruf an previousIndex wenn der Cursor wird, bevor das Anfangselement -1 zurück und (2) ein Anruf an nextindex wenn sich der Cursor nach dem letzten Element kehrt list.size () . Um all dies zu konkretisieren, ist die folgende eine mögliche Implementierung von List.indexOf.

Beachten Sie, dass die indexOf Methode gibt it.previousIndex (), auch wenn er die Liste in der Vorwärtsrichtung durchquert. Der Grund dafür ist, dass it.nextIndex (), um den Index des Elements zurückkehren würden wir im Begriff sind, zu untersuchen, und wir wollen den Index des Elements kehren wir gerade untersucht.

Der Iterator Schnittstelle stellt die Entfernungsoperation das letzte Element von nächsten aus der Sammlung zurückgegeben zu entfernen. Für ListIterator. Diese Operation entfernt das letzte Element durch nächste oder vorherige zurückgegeben. Der ListIterator Schnittstelle bietet zwei zusätzliche Operationen, die Liste zu ändern # 151; gesetzt und hinzufügen. Die Set-Methode überschreibt die zuletzt durch nächste oder vorherige mit dem angegebenen Elemente zurückzuElement. Der folgende Algorithmus verwendet polymorpher Satz alle Vorkommen von einem festgelegten Wert durch ein anderes zu ersetzen.

Das einzige Stück Verschlagenheit in diesem Beispiel ist der Gleichheitstest zwischen val und it.next. Sie müssen einen speziellen Fall ein val Wert von null eine Nullpointer zu verhindern.

Die Add-Methode fügt ein neues Element in die Liste unmittelbar vor der aktuellen Cursorposition. Dieses Verfahren wird in dem folgenden polymorphen Algorithmus veranschaulicht alle Vorkommen eines bestimmten Werts mit der Sequenz von Werten in der angegebenen Liste enthalten ist, zu ersetzen.

Range-Ansicht Betrieb

Die Reichweite-view Betrieb subList (int fromindex, int toIndex). gibt eine Listenansicht des Teils dieser Liste, deren Indizes von fromindex reichen. einschließlich, toIndex. exklusiv. Dieser halboffenen Bereich spiegelt die typisch für die Schleife.

Wie der Begriff Ansicht schon sagt, wird die zurückgegebene Liste von der Liste, auf der gesicherten subList genannt wurde, so dass Änderungen in der ehemaligen in diesem reflektiert werden.

Diese Methode eliminiert die Notwendigkeit für explizite Bereich Operationen (von der Art, die für Arrays häufig vorhanden ist). Jede Operation, die eine Liste erwartet kann, indem man eine subList Ansicht anstelle einer ganzen Liste als Range-Betrieb verwendet werden. Zum Beispiel entfernt das folgende Idiom eine Reihe von Elementen aus einer Liste.

Ähnliche Idiome können für ein Element in einem Bereich zu suchen, konstruiert werden.

Man beachte, dass die vorangehenden Idiome den Index des gefundenen Elementes in der Unterliste zurück. der Index nicht in der Trägerliste.

Alle polymorphen Algorithmus, der auf einer Liste arbeitet. wie die Beispiele ersetzen und mischen, arbeitet mit der Liste zurück von subList.

Ausführen des Programms erzeugt eine Ausgabe wie folgt aus.

Obwohl die subList Betrieb extrem leistungsfähig ist, muss einige Sorgfalt ausgeübt werden, wenn es zu benutzen. Die Semantik der Liste zurückgegeben durch subList undefiniert werden, wenn Elemente hinzugefügt oder von der Träger Liste in irgendeiner Weise anders als über die zurückgegebene Liste entfernt. Somit ist es sehr empfehlenswert, dass Sie durch subList die Liste zurück verwenden nur als vorübergehendes Objekt # 151; eine oder eine Folge von Operationen Bereich auf der Trägerliste auszuführen. Je länger Sie verwenden, um die subList Instanz, desto größer ist die Wahrscheinlichkeit, dass Sie es Kompromisse eingehen werde durch die Unterstützung Liste direkt zu ändern oder durch einen anderen subList Objekt. Beachten Sie, dass es legal ist, eine Unterliste einer Unterliste zu ändern und weiterhin die ursprüngliche Unterliste mit (wenn auch nicht gleichzeitig).

Liste Algorithmen

  • Sortieren # 151; sortiert eine Liste ein Merge-Sort-Algorithmus, die eine schnelle, stabile Art bietet. (Eine stabile Sortierung ist eine, die nicht gleich Elemente nicht neu anordnen.)
  • Shuffle # 151; zufällig permutiert die Elemente in einer Liste.
  • umkehren # 151; kehrt die Reihenfolge der Elemente in einer Liste.
  • drehen # 151; dreht sich alle Elemente in einer Liste nach einer bestimmten Entfernung.
  • Wechsel # 151; tauscht die Elemente an bestimmten Positionen in einer Liste.
  • alles ersetzen # 151; ersetzt alle Vorkommen eines mit einem anderen bestimmten Wert.
  • füllen # 151; überschreibt jedes Element in einer Liste mit dem angegebenen Wert.
  • Kopieren # 151; Kopien der Quellenliste in die Zielliste.
  • binäre Suche # 151; sucht nach einem Element in einer geordneten Liste der binären Suchalgorithmus.
  • indexOfSubList # 151; gibt den Index des ersten Teilliste von einer Liste, die gleich einem anderen ist.
  • lastIndexOfSubList # 151; gibt den Index des letzten Teilliste von einer Liste, die gleich einem anderen ist.

Die Nutzung dieser Seite und das gesamte Material auf den Seiten unter „Die Java-Tutorials“ Banner unterliegt diesen rechtlichen Hinweise.

In Verbindung stehende Artikel