Java スプリッター
JavaのSpliteratorは、4つのイテレータのうちの1つです。Enumeration、Iterator、ListIterator、そしてSpliteratorです。
JavaのSpliteratorです。
イテレータやリストイテレータと同様に、スプリットレータはJavaのイテレータであり、リスト実装オブジェクトから要素を1つずつ反復処理するために使用されます。Javaのスプリットレータに関するいくつかの重要なポイントは以下の通りです:
-
- Java Collection APIにおけるインターフェースであるJavaのSpliteratorです。
-
- SpliteratorはJava 8のリリースでjava.utilパッケージに導入されました。
-
- それは並列プログラミングの機能をサポートしています。
-
- Collection APIおよびStream APIのクラスの両方に使用することができます。
-
- コレクションやAPIオブジェクトについての特性を提供します。
-
- Mapの実装クラスにはこのイテレータを使用することはできません。
-
- 複数のスレッドで要素を個別に反復処理するために、tryAdvance()メソッドを使用します。
-
- 要素をシーケンシャルに単一のスレッドで反復するために、forEachRemaining()メソッドを使用します。
-
- 自身をサブSpliteratorに分割するために、trySplit()メソッドを使用します。
- Spliteratorはデータの連続および並列処理の両方をサポートしています。
Spliterator自体は並列プログラミングの振る舞いを提供しません。ただし、それをサポートするためのいくつかのメソッドが提供されています。開発者はSpliteratorインターフェースのメソッドを利用し、Fork/Joinフレームワークを使って並列プログラミングを実装するべきです(ひとつの適切な方法)。
スプリッタレータの主な機能
- Splitting the source data.
- Processing the source data.
JavaのSpliteratorクラスの図表を日本語で言い換えると:「JavaのSpliteratorクラスのクラス図」
JavaのSpliteratorメソッドを言い換えると
このセクションでは、JavaのSpliteratorメソッドを一つずつリストアップし、便利な説明と共に説明します。
-
- 特性を返します:このSpliteratorとその要素の特性のセットを返します。
-
- 要素の推定数を返します:forEachRemaining()トラバーサルでエンカウントされる要素の数の推定値を返します。または、無限、未知、または計算が高価な場合はLong.MAX_VALUEを返します。
-
- 与えられたアクションを各残りの要素に対して行います。現在のスレッドで順次実行され、すべての要素が処理されるか、アクションが例外をスローするまで実行されます。
-
- デフォルトのComparatorを取得します:このSpliteratorのソースがComparatorでソートされている場合、そのComparatorを返します。
-
- ExactSizeIfKnownを取得します(デフォルト):このSpliteratorがSIZEDの場合はestimateSize()を返し、それ以外の場合は-1を返す便利なメソッドです。
-
- 指定された特徴を指定された特徴として含む場合はtrueを返します。
-
- 指定されたアクションを実行し、残りの要素が存在する場合はtrueを返します。それ以外の場合はfalseを返します。
- Spliteratorがパーティションに分割できる場合、このメソッドから戻った時点ではこのSpliteratorによってカバーされない要素をカバーするSpliteratorを返します。
JavaのSpliteratorの例を示します。
このセクションでは、spliterator()を使用してJava Spliteratorオブジェクトを作成する方法について説明し、簡単な例を開発します。
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);
}
}
出力:
Rams
Posa
Chinni
上記のプログラムと出力を観察すると、Spliterator.forEachRemaining() メソッドは ArrayList.foreach() と同じように動作することが容易に理解できます。はい、両方は似たような方法で動作します。
スプリッタレータの利点
-
- 他のイテレーターと比べて、より優れたパフォーマンスを提供します。
-
- イテレーターやリストイテレーターとは異なり、並列プログラミング機能をサポートしています。
- イテレーターやリストイテレーターとは異なり、データの順次処理および並列処理の両方をサポートしています。
イテレーター対スプリッター
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. |
それがJavaのSpliteratorについてすべてです。参考:APIドキュメント。