Java スプリッター

JavaのSpliteratorは、4つのイテレータのうちの1つです。Enumeration、Iterator、ListIterator、そしてSpliteratorです。

JavaのSpliteratorです。

イテレータやリストイテレータと同様に、スプリットレータはJavaのイテレータであり、リスト実装オブジェクトから要素を1つずつ反復処理するために使用されます。Javaのスプリットレータに関するいくつかの重要なポイントは以下の通りです:

    1. Java Collection APIにおけるインターフェースであるJavaのSpliteratorです。

 

    1. SpliteratorはJava 8のリリースでjava.utilパッケージに導入されました。

 

    1. それは並列プログラミングの機能をサポートしています。

 

    1. Collection APIおよびStream APIのクラスの両方に使用することができます。

 

    1. コレクションやAPIオブジェクトについての特性を提供します。

 

    1. Mapの実装クラスにはこのイテレータを使用することはできません。

 

    1. 複数のスレッドで要素を個別に反復処理するために、tryAdvance()メソッドを使用します。

 

    1. 要素をシーケンシャルに単一のスレッドで反復するために、forEachRemaining()メソッドを使用します。

 

    1. 自身をサブSpliteratorに分割するために、trySplit()メソッドを使用します。

 

    Spliteratorはデータの連続および並列処理の両方をサポートしています。

Spliterator自体は並列プログラミングの振る舞いを提供しません。ただし、それをサポートするためのいくつかのメソッドが提供されています。開発者はSpliteratorインターフェースのメソッドを利用し、Fork/Joinフレームワークを使って並列プログラミングを実装するべきです(ひとつの適切な方法)。

スプリッタレータの主な機能

  • Splitting the source data.
  • Processing the source data.
Java Spliterator

JavaのSpliteratorクラスの図表を日本語で言い換えると:「JavaのSpliteratorクラスのクラス図」

Java Spliterator Class Diagram

JavaのSpliteratorメソッドを言い換えると

このセクションでは、JavaのSpliteratorメソッドを一つずつリストアップし、便利な説明と共に説明します。

    1. 特性を返します:このSpliteratorとその要素の特性のセットを返します。

 

    1. 要素の推定数を返します:forEachRemaining()トラバーサルでエンカウントされる要素の数の推定値を返します。または、無限、未知、または計算が高価な場合はLong.MAX_VALUEを返します。

 

    1. 与えられたアクションを各残りの要素に対して行います。現在のスレッドで順次実行され、すべての要素が処理されるか、アクションが例外をスローするまで実行されます。

 

    1. デフォルトのComparatorを取得します:このSpliteratorのソースがComparatorでソートされている場合、そのComparatorを返します。

 

    1. ExactSizeIfKnownを取得します(デフォルト):このSpliteratorがSIZEDの場合はestimateSize()を返し、それ以外の場合は-1を返す便利なメソッドです。

 

    1. 指定された特徴を指定された特徴として含む場合はtrueを返します。

 

    1. 指定されたアクションを実行し、残りの要素が存在する場合は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() と同じように動作することが容易に理解できます。はい、両方は似たような方法で動作します。

スプリッタレータの利点

    1. 他のイテレーターと比べて、より優れたパフォーマンスを提供します。

 

    1. イテレーターやリストイテレーターとは異なり、並列プログラミング機能をサポートしています。

 

    イテレーターやリストイテレーターとは異なり、データの順次処理および並列処理の両方をサポートしています。

イテレーター対スプリッター

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ドキュメント。

コメントを残す 0

Your email address will not be published. Required fields are marked *