Java Spliterator – Tutorial
Wie Iterator und ListIterator ist Spliterator ein Java Iterator, der dazu dient, Elemente einzeln von einem über Liste implementierten Objekt zu iterieren. Einige wichtige Punkte über den 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.
- Er unterstützt die Parallelprogrammierung.
- Wir können ihn sowohl für Collection API- als auch für Stream API-Klassen verwenden.
- Er bietet Merkmale über Collection- oder API-Objekte.
- Dieser Iterator kann NICHT für über Map implementierte Klassen verwendet werden.
- Er verwendet die tryAdvance()-Methode, um Elemente einzeln in mehreren Threads zur Unterstützung der Parallelverarbeitung zu iterieren.
- Er verwendet die forEachRemaining()-Methode, um Elemente sequenziell in einem einzigen Thread zu iterieren.
- Er verwendet die trySplit()-Methode, um sich selbst in Sub-Spliteratoren zur Unterstützung der Parallelverarbeitung aufzuteilen.
- Spliterator unterstützt sowohl sequenzielle als auch parallele Datenverarbeitung.
Der Spliterator selbst bietet kein Verhalten zur Parallelprogrammierung. Er stellt jedoch einige Methoden zur Unterstützung bereit. Entwickler sollten die Methoden der Spliterator-Schnittstelle nutzen und die Parallelprogrammierung unter Verwendung des Fork/Join-Frameworks implementieren (ein guter Ansatz).
Hauptfunktionalitäten des Spliterator
- Aufteilen der Quelldaten.
- Verarbeiten der Quelldaten.
Java Spliterator Methoden
In diesem Abschnitt listen wir alle Java Spliterator Methoden einzeln auf mit einer nützlichen Beschreibung.
- int characteristics(): Gibt eine Reihe von Merkmalen dieses Spliterators und seiner Elemente zurück.
- long estimateSize(): Gibt eine Schätzung der Anzahl der Elemente zurück, denen man bei einem forEachRemaining()-Durchlauf begegnen würde, oder gibt Long.MAX_VALUE zurück, wenn unendlich, unbekannt oder zu kostspielig zu berechnen.
- default void forEachRemaining(Consumer<? super T> action): Führt die angegebene Aktion für jedes verbleibende Element sequenziell im aktuellen Thread durch, bis alle Elemente verarbeitet wurden oder die Aktion eine Ausnahme wirft.
- default Comparator<? super T> getComparator(): Wenn die Quelle dieses Spliterators durch einen Comparator SORTIERT ist, gibt dieser den Comparator zurück.
- default long getExactSizeIfKnown(): Bequemlichkeitsmethode, die estimateSize() zurückgibt, wenn dieser Spliterator SIZED ist, sonst -1.
- default boolean hasCharacteristics(int characteristics): Gibt true zurück, wenn die characteristics() dieses Spliterators alle angegebenen Merkmale enthalten.
- boolean tryAdvance(Consumer<? super T> action): Führt die angegebene Aktion an einem verbleibenden Element durch, gibt true zurück, wenn ein solches existiert, sonst false.
- Spliterator<T> trySplit(): Wenn dieser Spliterator teilbar ist, gibt er einen Spliterator zurück, der Elemente abdeckt, die nach Rückgabe aus dieser Methode nicht mehr von diesem Spliterator abgedeckt werden.
Java Spliterator Beispiel
In diesem Abschnitt diskutieren wir, wie man ein Java Spliterator-Objekt mit spliterator() erstellt und entwickeln ein einfaches Beispiel.
import java.util.Spliterator;
import java.util.ArrayList;
import java.util.List;
public class SpliteratorSequentialIteration
{
public static void main(String[] args)
{
List<String> names = new ArrayList<>();
names.add("Rams");
names.add("Posa");
names.add("Chinni");
// Getting Spliterator
Spliterator<String> namesSpliterator = names.spliterator();
// Traversing elements
namesSpliterator.forEachRemaining(System.out::println);
}
}
Output:
Rams
Posa
Chinni
Wenn wir das obige Programm und den Output betrachten, können wir leicht verstehen, dass diese Spliterator.forEachRemaining()-Methode auf die gleiche Weise funktioniert wie ArrayList.foreach(). Ja, beide funktionieren auf ähnliche Weise.
Vorteile des Spliterator
- Im Gegensatz zu Iterator und ListIterator unterstützt er die Parallelprogrammierung.
- Im Gegensatz zu Iterator und ListIterator unterstützt er sowohl sequenzielle als auch parallele Datenverarbeitung.
- Im Vergleich zu anderen Iteratoren bietet er eine bessere Leistung.
Iterator vs Spliterator
Iterator | Spliterator |
---|---|
Eingeführt in Java 1.2. | Eingeführt in Java 1.8. |
Er ist ein Iterator für die gesamte Collection API. | Er ist ein Iterator sowohl für die Collection als auch für die Stream API, außer für über Map implementierte Klassen. |
Er ist ein universeller Iterator. | Er ist KEIN universeller Iterator. |
Er unterstützt KEINE Parallelprogrammierung. | Er unterstützt die Parallelprogrammierung. |
Das ist alles zum Thema Spliterator in Java.