我试图了解Spliterator的功能,并遇到了这两种方法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
方法:
getExactSizeIfKnown
方法是:
这两个方法都引用了 SIZED
,它是一个:
基于所有这些,如果Spliterator
不具有SIZED
characteristic,则这两种方法将仅返回不同的值。
在您的示例中,Spliterator
的源是ArrayList
。如果我们看一下 ArrayList.spliterator()
的文档:
由于 SUBSIZED
特性,从Spliterator
创建的ArrayList
(包括由trySplit
生成的estimateSize
)将永远不会让getExactSizeIfKnown
和ojit_code返回不同的值。