SpliteratorでestimatedSizeとgetExactSizeIfKnown差

ghostrider:

私はSpliteratorの機能を理解しようとすると、これらの2つの方法に出くわしていますestimatedSizeし、getExactSizeIfKnown私は何であるかを見つけ出すことができestimatedSizeなく必ず正確に何をしgetExactSizeIfKnownません。誰かが両者の違いを説明する例をお願いすることができます。

編集:私はそれらの両方が同一である次の例を試してみました。これで例は、それらは異なるだろうか?

public static void main(String[] args) {
        List<Integer> l = new ArrayList<>();
        l.add(1);
        l.add(2);
        l.add(3);
        Spliterator<Integer> s= (Spliterator<Integer>) l.spliterator();
    Spliterator<Integer> s1=s.trySplit();
    while(s.tryAdvance(n -> {System.out.print(n+" ");System.out.println("estimateSize "+s.estimateSize()+" getexactsizeifknown "+s.getExactSizeIfKnown());})); 
なスロー:

estimateSize方法:

戻り値で遭遇するであろう要素の数の推定値forEachRemaining(java.util.function.Consumer<? super T>)トラバーサル、または戻りLong.MAX_VALUE無限、不明、またはあまりにも高価で計算する場合。

このSpliteratorがある場合はSIZED、まだ部分的に横断または分割されていない、またはこのSpliteratorがありSUBSIZED、まだ部分的に横断されていない、この推定値は、完全なトラバーサルで遭遇するであろう要素の正確なカウントでなければなりません。それ以外の場合、この推定値は任意に不正確かもしれないが、全体の指定された呼び出しとして減少しなければなりませんtrySplit()

API注:

でも、不正確な推定値は、多くの場合、計算に便利で安価です。例えば、約バランスバイナリツリーのサブspliterator要素の数は、その親の半分であることが推定値を返すことができます。ルートSpliteratorは、正確なカウントを維持しない場合、それはその最大の深さに対応する2の累乗であることをサイズを見積もることができます。

そして、getExactSizeIfKnownこの方法は以下のとおりです。

リターンという簡易メソッドestimateSize()このSpliteratorであればSIZED、そうでありません-1

実装要件:

デフォルトの実装では、結果を返すestimateSize()Spliteratorはの特性を報告した場合SIZED、および-1それ以外を。

これらの方法の参照の両方SIZEDです。

返された値という特性値を意味estimateSize()トラバーサルまたは分割前は、構造ソース修飾の非存在下で、完全なトラバーサルが遭遇される要素の数の正確なカウントを表し、有限の大きさを表します。

API注:

コレクションのための最もSpliterators、そのカバーのすべての要素Collectionのレポートこの特徴。例えばためのもののようなサブspliterators、HashSet要素の部分集合をカバーし、その報告されたサイズに近似し、ありません。

場合は、このすべてに基づいて、二つの方法は今まで、異なる値を返しますSpliteratorがありませんSIZED 特性を


あなたの例では、のソースがSpliteratorありますArrayList我々は、のドキュメントを見ている場合ArrayList.spliterator()

作成遅延バインディングとフェイルファストSpliteratorこのリスト内の要素の上に。

SpliteratorレポートSpliterator.SIZEDSpliterator.SUBSIZEDSpliterator.ORDEREDオーバーライド実装では、追加の特性値の報告を文書化する必要があります。

ためにSUBSIZED特徴的な、Spliteratorから作成さArrayListから生じるもの-including trySplit-will決して持ちestimateSizegetExactSizeIfKnown異なる値を返します。

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=180322&siteId=1