java8 r遍历_Spliterator并行遍历迭代器(JDK8)

Spliterator是什么?

public interface Spliterator

Spliterator是一个可分割迭代器(splitable iterator),可以和iterator顺序遍历迭代器一起看。jdk1.8发布后,对于并行处理的能力大大增强,Spliterator就是为了并行遍历元素而设计的一个迭代器,jdk1.8中的集合框架中的数据结构都默认实现了spliterator,后面我们也会结合ArrayList中的spliterator()一起解析。

//单个对元素执行给定的动作,如果有剩下元素未处理返回true,否则返回false

boolean tryAdvance(Consumer super T> action);

//对每个剩余元素执行给定的动作,依次处理,直到所有元素已被处理或被异常终止。默认方法调用tryAdvance方法

default void forEachRemaining(Consumer super T> action) {

do { } while (tryAdvance(action));

}

//对任务分割,返回一个新的Spliterator迭代器

Spliterator trySplit();

//用于估算还剩下多少个元素需要遍历

long estimateSize();

//当迭代器拥有SIZED特征时,返回剩余元素个数;否则返回-1

default long getExactSizeIfKnown() {

return (characteristics() & SIZED) == 0 ? -1L : estimateSize();

}

//返回当前对象有哪些特征值

int characteristics();

//是否具有当前特征值

default boolean hasCharacteristics(int characteristics) {

return (characteristics() & characteristics) == characteristics;

}

//如果Spliterator的list是通过Comparator排序的,则返回Comparator

//如果Spliterator的list是自然排序的 ,则返回null

//其他情况下抛错

default Comparator super T> getComparator() {

throw new IllegalStateException();

}

特征值其实就是为表示该Spliterator有哪些特性,用于可以更好控制和优化Spliterator的使用。关于获取比较器getComparator这一个方法,目前我还没看到具体使用的地方,所以可能理解有些误差。(源玛里有这里就不展示了)

ArrayList的例子

ArrayListSpliterator在ArrayList的源码里

static final class ArrayListSpliterator implements Spliterator {

//用于存放ArrayList对象

private final ArrayList list;

//起始位置(包含),advance/split操作时会修改

private int index;

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值