java源码学习Collection接口相关学习

1、关于Collection接口的描述

       Collection接口是 (java.util.Collection)是Java集合类的顶级接口之一,整个集合框架就围绕一组标准接口而设计,本文研究的集合基于JDK8的实现。而我们在开发过程中无时无刻都在与它打交道。

2、Collection源码解析

public interface Collection<E> extends Iterable<E> {

  //定义size方法,应返回size大小,最大值为Integer.MAX_VALUE
  int size();

  //定义isEmpty方法,用于返回是否为空
  boolean isEmpty();

  //定义contains方法,判断一个obj是否属于此集合
  boolean contains(Object o);

  //定义迭代器方法,返回一个迭代器对象
  Iterator<E> iterator();

  //定义转换为转换Obj数组的方法,返回一个obj数组
  Object[] toArray();

  //定义转换为泛型T数组的方法,返回一个指定泛型的数组
  <T> T[] toArray(T[] a);

  //定义add方法,添加一个元素e,并返回添加成功标志
  boolean add(E e);

  //定义remove方法,移除一个元素obj,并返回移除元素成功标志
  boolean remove(Object o);

  //定义containsAll方法,判断是否包含集合实例对象c
  boolean containsAll(Collection<?> c);

  //定义addAll方法,添加集合实例对象c到本实例中
  boolean addAll(Collection<? extends E> c);

  //定义removeAll方法,从本实例中移除集合实力对象c
  boolean removeAll(Collection<?> c);


  /**
   * jdk8新增
   * 大意为:
   * 定义removeIf方法,该方传递参数为函数式,传递内容是一个接口类型,该接口类型
   * 定义为一个filter函数,该函数用于传递给Objects.requireNonNull判断,然后调用
   * 迭代器,将满足该定义的filter的本实例中的元素移除
   *
   * @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;
  }

  //定义retainAll方法,取本例与集合实例c的交集,判断交集元素数量是否大于0
  boolean retainAll(Collection<?> c);

  //定义clear方法,清除本例集合中的所有元素
  void clear();

  // Comparison and hashing    原注释,不明意义

  //不解释
  boolean equals(Object o);

  //定义hashCode方法,获取hashCode标记的方法
  int hashCode();

  /**
   * jdk8新增
   * 大意为:
   * 将迭代器拆分,重写自Iterable接口,从已知元素数量的本例中返回拆分后的迭代器
   * 此方法返回的为本类本身
   * 子类可能重写迭代器拆分,将一个集合的迭代拆分为多个集合的迭代交由多个线程
   *
   * @since 1.8
   */
  @Override//重写父类
  default Spliterator<E> spliterator() {
    return Spliterators.spliterator(this, 0);
  }

  /**
   * jdk8新增
   * 大意为:
   * 将默认的迭代器拆分后的结果,聚合为流,该流并非io中的流,
   * 是一种类似于数据排序操作流
   *
   * @since 1.8
   */
  default Stream<E> stream() {
    return StreamSupport.stream(spliterator(), false);
  }

  /**
   * jdk8新增
   * 同上,但是具体其他的实现中,因为可并行,所以可能是线程不安全的
   *
   * @since 1.8
   */
  default Stream<E> parallelStream() {
    return StreamSupport.stream(spliterator(), true);
  }    

集合类的方法总结

简单描述:

    大小(size),判空(isEmpty),添加元素(add),删除元素(remove),是否包含(contains)

  转换数组(toArray),清空(clear),遍历与迭代(forEach(父接口中),iterator)

  是否相同(equals),哈希(hashCode),求交集(retainAll)

  除此之外,提供了java8的(removeIf)判断移除, (spliterator)多线程遍历迭代,(stream)单线程流式操作集合

       (parallelStream) 多线程流式操作集合

3、Collection接口继承的Iterable接口

Iterable 源码分析

public interface Iterable<T> {

    //定义iterator方法,返回迭代器
           

  Iterator<T> iterator();

    /**
      * jdk8新增
      * 大意为:
      * 根据action调用Objects.requireNonNull进行过滤
      * 过滤结果调用for循环取出,
      * @since 1.8
      */
           

  default void forEach(Consumer<? super T> action) {
       Objects.requireNonNull(action);
       for (T t : this) {
           action.accept(t);
       }
   }

    /**
      * jdk8新增
      * 大意为:
      * 分离迭代器,将未知大小的迭代器进行拆分,返回拆分的迭代器本身
      *
      * @since 1.8
      */
           

  default Spliterator<T> spliterator() {
       return Spliterators.spliteratorUnknownSize(iterator(), 0);
   }
}结构图

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值