12

Spliteratorどのように機能し、スプリッターがどのように設計されているかを理解しようとしています。trySplit()のより重要なメソッドの 1 つである可能性が高いことは認識していますがSpliterator、サードパーティのSpliterator実装を見ると、それらのスプリッテレータが無条件に null を返すことがありますtrySplit()

質問:

  1. Spliterator通常のイテレータと無条件に null を返すa に違いはありますか? そのようなスプリッテレータは、まあ、分割のポイントを打ち負かしているようです。
  2. もちろん、条件付きで null を返すスプリッテレータtrySplit()の正当な使用例はありますが、無条件に null を返すスプリッテレータの正当な使用例はありますか?
4

3 に答える 3

5

あなたが言ったように、Iteratorに対するSpliteratorの主な利点は、並列化を可能にするtrySplit()メソッドですが、他にも重要な利点があります。

http://docs.oracle.com/javase/8/docs/api/java/util/Spliterator.html

Spliterator API は、分解と単一要素の反復をサポートすることにより、順次トラバーサルに加えて効率的な並列トラバーサルをサポートするように設計されています。さらに、Spliterator を介して要素にアクセスするためのプロトコルは、要素ごとのオーバーヘッドが Iterator よりも小さくなるように設計されており、hasNext() と next() に別々のメソッドを持つことに伴う固有の競合を回避します。

さらに、Java8 のストリームを利用するために、 StreamSupport.streamを使用してスプリッテレータをストリームに直接変換できます。

于 2015-03-05T03:10:18.580 に答える