Spliterator接口是1.8新加的接口,字面意思可分割的迭代器,不同以往的iterator需要顺序迭代,Spliterator可以分割为若干个小的迭代器进行并行操作,既可以实现多线程操作提高效率,又可以避免普通迭代器的fail-fast机制所带来的异常。Spliterator可以配合1.8新加的Stream进行并行流的实现,大大提高处理效率。
我们先看Spliterator接口的几个方法,然后结合我们之前看过的ArrayList中实现的ArrayListSpliterator进一步理解Spliterator:
属性
通过characteristics()方法返回的值,用来标识实现类所具有的的特征
public static final int ORDERED = 0x00000010;//表示元素是有序的(每一次遍历结果相同)
public static final int DISTINCT = 0x00000001;//表示元素不重复
public static final int SORTED = 0x00000004;//表示元素是按一定规律进行排列(有指定比较器)
public static final int SIZED = 0x00000040;//是否确定大小
public static final int NONNULL = 0x00000100;//表示迭代器中没有null元素
public static final int IMMUTABLE = 0x00000400;//表示元素不可变
public static final int CONCURRENT = 0x00001000;//表示迭代器可以多线程操作
public static final int SUBSIZED = 0x00004000;//表示子Spliterators都具有SIZED特性
方法
boolean tryAdvance(Consumer<? super T> action);
如果有剩余的元素存在,执行参数给定的操作,并返回true,否则就返回false。
如果Spliterator对象具有ORDERED属性,那么tryAdvance也会按照相应的顺序去执行。default void forEachRemaining(Consumer<? super T> action)
对Spliterator的每一个对象执行tryAdva