Java集合框架系列之——Collection

Collection

Collection 接口类图

Collection接口类图
从上述类图中可以看出Collection接口继承于Iterable接口,所以我们下面首先看到Iterable接口。

Iterable源码分析

从上述类图中可以看出Iterable内有三个方法,其中两个方法都由default修饰,提供了默认实现方法,实现类可以有选择性的重写部分方法,下面看看每个方法的作用是什么:

#返回元素类型为T的迭代器,有了这个迭代器就可以对集合中元素进行遍历
Iterator<T> iterator();

#遍历集合中的元素并对元素进行执行操作,直到遍历完成或抛出异常
default void forEach(Consumer<? super T> action) {
    Objects.requireNonNull(action);
    for (T t : this) {
         action.accept(t);
    }
}

#Spliterator(splitable iterator可分割迭代器),对集合进行并行遍历
default Spliterator<T> spliterator() {
        return Spliterators.spliteratorUnknownSize(iterator(), 0);
}

Collection接口源码分析

    //查询操作,以下方法属于查询操作
    #返回集合中元素数量,如果元素数量大于Integer.MAX_VALUE将返回Integer.MAX_VALUE
    int size();

    #如果集合中没有元素,将返回true,否则返回false
    boolean isEmpty();

    #如果集合中包含指定的元素,则返回true,否则false
    boolean contains(Object o);

    #返回该集合中元素的迭代器。对于返回元素的顺序,没有任何保证。
    Iterator<E> iterator();

    #如果此集合对其迭代器返回的元素的顺序有任何保证,则该方法必须以相同的顺序返回元素。
    #这个方法必须分配一个新数组,即使这个集合是由数组组成的。
    #这个方法充当集合与数组之间转换的桥梁
    Object[] toArray();

    #返回一个包含集合中所有元素的数组
    #如果集合中的元素类型与指定数组类型相匹配则直接按照元素中数组类型返回
    #否则,将使用指定数组的运行时类型和该集合的大小分配新的数组。
    #如果此集合对其迭代器返回的元素的顺序有任何保证,则该方法必须以相同的顺序返回元素。
    #T:返回数组的类型
    #a:如果该数组足够大可以容纳集合中所有元素,则使用该数组存储,否则将根据集合大小和元素类型重新创建一个数组
    <T> T[] toArray(T[] a);

    // 修改操作,以下方法属于修改操作

    #向集合中添加元素,如果该元素在集合中已经存在则返回false,否则返回true
    #集合本身对添加的元素会有所限制,比如有些集合拒绝添加null
    boolean add(E e);

    #从集合中删除指定元素,如果指定的元素存在集合中并完成了删除操作,则返回true
    boolean remove(Object o);


    // 批量操作

     #如果集合中包含指定的所有元素,则返回true
    boolean containsAll(Collection<?> c);

    #将指定集合中的所有元素添加到此集合
    #如果在运行过程中修改指定的集合,则该操作的行为是未定义的
    boolean addAll(Collection<? extends E> c);

    #从当前集合中移除指定集合中的所有元素
    boolean removeAll(Collection<?> c);

   
    # @since 1.8
    #删除该集合中满足给定谓词的所有元素
    #在迭代期间抛出的任何异常都会传递给调用者
    default boolean removeIf(Predicate<? super E> filter) {
        Objects.requireNonNull(filter);
        boolean removed = false;
        final Iterator<E> each = iterator();
        while (each.hasNext()) {
            if (filter.test(each.next())) {
                each.remove();
                removed = true;
            }
        }
        return removed;
    }

    #只保留集合中指定的元素
    boolean retainAll(Collection<?> c);

    #清空集合中所有元素
    void clear();


    // 比较和散列

    #比较指定对象与当前集合是否相等
    #@see Object#equals(Object)
    #@see Set#equals(Object)
    #@see List#equals(Object)
    boolean equals(Object o);

    #@see Object#hashCode()
    #@see Object#equals(Object)
    #返回当前对象的哈希值
    int hashCode();

    
    #@since 1.8
    #创建一个集合的并行迭代器
    @Override
    default Spliterator<E> spliterator() {
        return Spliterators.spliterator(this, 0);
    }

   
    #@since 1.8
    #将当前集合作为数据源,创建一个序列流
    default Stream<E> stream() {
        return StreamSupport.stream(spliterator(), false);
    }

    #@since 1.8
    #将当前集合作为数据源,创建一个可并行计算的序列流
    default Stream<E> parallelStream() {
        return StreamSupport.stream(spliterator(), true);
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值