java.util.Spliterator源码解析

1. 介绍

​ 可分割迭代器,用来把原来的对象元素进行分割和遍历,也可能会修改元素。可以用tryAdvance来操作一个元素,可以用forEachRemaining来批量操作元素。Spliterator可以用trySplit来分割元素,返回另一个Spliterator,用在并发操作中,相当于递归,分而治之。如果Spliterator不能分割或者分割后元素非常不均衡或者是效率差,将不会从并发操作中受益。

​ Spliterator有一些特征:ORDERED,DISTINCT,SORTED,SIZED,NONNULL,IMMUTABLE,CONCURRENT,SUBSIZED,这些特征会作为交集表现出来。某些特征也约束了某些方法的操作。

jdk1.8加入

2. tryAdvance

    boolean tryAdvance(Consumer<? super T> action);

如果有其它元素,对一个元素执行action

3. forEachRemaining

default void forEachRemaining(Consumer<? super T> action) {
    do { } while (tryAdvance(action));
}

对于剩余的元素,在当前线程中按序执行action

4. trySplist

    Spliterator<T> trySplit();

如果这个spliterator可以被分割,返回分割后的迭代器,迭代器会包含当前的一部分元素,如果不能被分割,返回null

5. estimateSize

    long estimateSize();

返回当前要处理的元素的数量,如果为无穷大或者未知的或者无法计算,返回Long.MAX_VALUE

6. getExactSizeIfKnown

    default long getExactSizeIfKnown() {
        return (characteristics() & SIZED) == 0 ? -1L : estimateSize();
    }

如果特征为SIZED返回estimateSize否则返回-1

7. characteristics

    int characteristics();

返回集合的特征。通过判断集合的特征,可以更好的做运算

8. hasCharacteristics

    default boolean hasCharacteristics(int characteristics) {
        return (characteristics() & characteristics) == characteristics;
    }

集合是否拥有某个特征

9. getComparator

    default Comparator<? super T> getComparator() {
        throw new IllegalStateException();
    }

如果迭代器的源是SORTED,如果有Comparator返回原来的,如果没有返回null,如果不是SORTED抛出异常

10. ofPrimitive

public interface OfPrimitive<T, T_CONS, T_SPLITR extends Spliterator.OfPrimitive<T, T_CONS, T_SPLITR>>
            extends Spliterator<T> {
        @Override
        T_SPLITR trySplit();


        @SuppressWarnings("overloads")
        boolean tryAdvance(T_CONS action);


        @SuppressWarnings("overloads")
        default void forEachRemaining(T_CONS action) {
            do { } while (tryAdvance(action));
        }
    }

包装了一下

实时内容请关注微信公众号,公众号与博客同时更新:程序员星星
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值