Java Spliterator ist einer der vier Iteratoren – Enumeration, Iterator, ListIterator und Spliterator.
Java Spliterator
Wie Iterator und ListIterator ist Spliterator ein Java Iterator, der verwendet wird, um Elemente nacheinander aus einem implementierten List-Objekt zu durchlaufen. Einige wichtige Punkte über Java Spliterator sind:
- Java Spliterator ist eine Schnittstelle in der Java Collection API.
- Spliterator wurde in der Java 8 Version im
java.util
Paket eingeführt. - Es unterstützt die Parallelprogrammierungsfunktionalität.
- Wir können es für Klassen der Collection API und der Stream API verwenden.
- Es liefert Eigenschaften über Collection- oder API-Objekte.
- Wir können diesen Iterator nicht für implementierte Klassen von Map verwenden.
- Es verwendet die Methode
tryAdvance()
, um Elemente einzeln in mehreren Threads zu durchlaufen, um die parallele Verarbeitung zu unterstützen. - Es verwendet die Methode
forEachRemaining()
, um Elemente sequenziell in einem einzigen Thread zu durchlaufen. - Es verwendet die Methode
trySplit()
, um sich in Sub-Splitter zu unterteilen, um die parallele Verarbeitung zu unterstützen. - Ein Spliterator unterstützt sowohl die sequenzielle als auch die parallele Verarbeitung von Daten.
Ein Spliterator selbst bietet kein paralleles Programmierverhalten. Es bietet jedoch einige Methoden zur Unterstützung. Entwickler sollten die Methoden der Spliterator-Schnittstelle nutzen und das parallele Programmieren mithilfe des Fork/Join-Frameworks implementieren (ein guter Ansatz).
Hauptfunktionen des Spliterators
- Aufteilen der Quelldaten
- Verarbeiten der Quelldaten
Klassen Diagramm des Java Spliterator
Das folgende Diagramm zeigt das Klassen Diagramm der Java Spliterator-Schnittstelle. Es hat viele Felder und Methoden.
Methoden des Java Spliterator
In diesem Abschnitt werden wir alle Java-Spliterator-Methoden nacheinander auflisten, zusammen mit einer nützlichen Beschreibung.
- int characteristics(): Gibt eine Menge von Eigenschaften dieses Spliterators und seiner Elemente zurück.
- long estimateSize(): Gibt eine Schätzung der Anzahl von Elementen zurück, die bei einer Durchquerung durch forEachRemaining() angetroffen würden, oder gibt Long.MAX_VALUE zurück, wenn unendlich, unbekannt oder zu teuer zu berechnen.
- default void forEachRemaining(Consumer action): Führt die angegebene Aktion für jedes verbleibende Element sequenziell im aktuellen Thread aus, bis alle Elemente verarbeitet wurden oder die Aktion eine Ausnahme auslöst.
- default Comparator getComparator(): Wenn die Quelle dieses Spliterators durch einen Comparator SORTIERT ist, wird dieser Comparator zurückgegeben.
- default long getExactSizeIfKnown(): Bequeme Methode, die estimateSize() zurückgibt, wenn dieser Spliterator SIZED ist, sonst -1.
- default boolean hasCharacteristics(int characteristics): Gibt true zurück, wenn die Eigenschaften dieses Spliterators alle der angegebenen Eigenschaften enthalten.
- boolean tryAdvance(Consumer action): Wenn ein verbleibendes Element existiert, führt es die angegebene Aktion darauf aus und gibt true zurück; andernfalls wird false zurückgegeben.
- Spliterator trySplit(): Wenn dieser Spliterator partitioniert werden kann, wird ein Spliterator zurückgegeben, der Elemente abdeckt, die bei der Rückkehr aus dieser Methode nicht von diesem Spliterator abgedeckt werden.
Java-Spliterator-Beispiel
In diesem Abschnitt werden wir besprechen, wie man ein Java Spliterator-Objekt mit spliterator() erstellt und ein einfaches Beispiel entwickelt.
import java.util.Spliterator;
import java.util.ArrayList;
import java.util.List;
public class SpliteratorSequentialIteration
{
public static void main(String[] args)
{
List names = new ArrayList<>();
names.add("Rams");
names.add("Posa");
names.add("Chinni");
// Spliterator erhalten
Spliterator namesSpliterator = names.spliterator();
// Elemente durchlaufen
namesSpliterator.forEachRemaining(System.out::println);
}
}
Ausgabe:-
Rams
Posa
Chinni
Wenn wir das obige Programm und die Ausgabe betrachten, können wir leicht verstehen, dass diese Methode Spliterator.forEachRemaining() genauso funktioniert wie ArrayList.foreach(). Ja, beide funktionieren auf ähnliche Weise.
Vorteile von Spliterator
- Im Gegensatz zu Iterator und ListIterator unterstützt es die Parallelprogrammierungsfunktionalität.
- Im Gegensatz zu Iterator und ListIterator unterstützt es sowohl die sequenzielle als auch die parallele Verarbeitung von Daten.
- Im Vergleich zu anderen Iteratoren bietet es bessere Leistung.
Iterator vs Spliterator
Iterator | Spliterator |
---|---|
Introduced in Java 1.2. | Introduced in Java 1.8. |
It is an Iterator for whole Collection API. | It is an Iterator for both Collection and Stream API, except Map implemented classes. |
It is an Universal Iterator. | It is NOT an Universal Iterator. |
It does NOT support Parallel Programming. | It supports Parallel Programming. |
Das ist alles über Spliterator in Java. Referenz: API-Dokumentation
Source:
https://www.digitalocean.com/community/tutorials/java-spliterator