JDK 集合 Collection

一、继承关系图

二、接口方法说明

Collection接口继承自Iterable接口,它是集合树的最顶层节点,它总共定义了15个方法:

//返回集合中元素的个数

int size();

//判断集合是否为空

boolean isEmpty();

//判断集合中是否包含指定对象

boolean contains(Object o);

//返回集合的迭代器

Iterator<E> iterator();

//将集合转换成数组

Object[] toArray();

//按照泛型将集合转换成数组

<T> T[] toArray(T[] a);

//在集合中增加指定元素

boolean add(E e);

//从集合中移除指定元素

 boolean remove(Object o);

//判断集合是否包含了指定集合的所有元素

 boolean containsAll(Collection<?> c);

//将指定集合的所有元素增加到集合中

 boolean addAll(Collection<? extends E> c);

//从集合中移除指定集合的所有元素

boolean removeAll(Collection<?> c);

//只保留指定集合中包含的元素

boolean retainAll(Collection<?> c);

//移除集合中所有的元素

 void clear();

//将集合与指定对象进行比较

boolean equals(Object o);

//返回集合的hashcode值

int hashCode();

三、重点继承实现子类

 * @author  Josh Bloch
 * @author  Neal Gafter
 * @see     Set
 * @see     List
 * @see     Map
 * @see     SortedSet
 * @see     SortedMap
 * @see     HashSet
 * @see     TreeSet
 * @see     ArrayList
 * @see     LinkedList
 * @see     Vector
 * @see     Collections
 * @see     Arrays
 * @see     AbstractCollection
 * @since 1.2

四、源码分析

  1 public interface Collection<E> extends Iterable<E> {
  2     // Query Operations    原注释,不明意义
  3 
  4     //定义size方法,应返回size大小,最大值为Integer.MAX_VALUE
  5     int size();
  6 
  7     //定义isEmpty方法,用于返回是否为空
  8     boolean isEmpty();
  9 
 10     //定义contains方法,判断一个obj是否属于此集合
 11     boolean contains(Object o);
 12 
 13     //定义迭代器方法,返回一个迭代器对象
 14     Iterator<E> iterator();
 15 
 16     //定义转换为转换Obj数组的方法,返回一个obj数组
 17     Object[] toArray();
 18 
 19     //定义转换为泛型T数组的方法,返回一个指定泛型的数组
 20     <T> T[] toArray(T[] a);
 21 
 22     //定义add方法,添加一个元素e,并返回添加成功标志
 23     boolean add(E e);
 24 
 25     //定义remove方法,移除一个元素obj,并返回移除元素成功标志
 26     boolean remove(Object o);
 27 
 28     //定义containsAll方法,判断是否包含集合实例对象c
 29     boolean containsAll(Collection<?> c);
 30 
 31     //定义addAll方法,添加集合实例对象c到本实例中
 32     boolean addAll(Collection<? extends E> c);
 33 
 34     //定义removeAll方法,从本实例中移除集合实力对象c
 35     boolean removeAll(Collection<?> c);
 36 
 37 
 38     /**
 39      * jdk8新增
 40      * 大意为:
 41      * 定义removeIf方法,该方传递参数为函数式,传递内容是一个接口类型,该接口类型
 42      * 定义为一个filter函数,该函数用于传递给Objects.requireNonNull判断,然后调用
 43      * 迭代器,将满足该定义的filter的本实例中的元素移除
 44      * @since 1.8
 45      */
 46     default boolean removeIf(Predicate<? super E> filter) {
 47         Objects.requireNonNull(filter);
 48         boolean removed = false;
 49         final Iterator<E> each = iterator();
 50         while (each.hasNext()) {
 51             if (filter.test(each.next())) {
 52                 each.remove();
 53                 removed = true;
 54             }
 55         }
 56         return removed;
 57     }
 58 
 59     //定义retainAll方法,取本例与集合实例c的交集,判断交集元素数量是否大于0
 60     boolean retainAll(Collection<?> c);
 61 
 62     //定义clear方法,清除本例集合中的所有元素
 63     void clear();
 64 
 65     // Comparison and hashing    原注释,不明意义
 66 
 67     //不解释
 68     boolean equals(Object o);
 69 
 70     //定义hashCode方法,获取hashCode标记的方法
 71     int hashCode();
 72 
 73     /**
 74      *jdk8新增
 75      *大意为:
 76      *将迭代器拆分,重写自Iterable接口,从已知元素数量的本例中返回拆分后的迭代器
 77      *此方法返回的为本类本身
 78      *子类可能重写迭代器拆分,将一个集合的迭代拆分为多个集合的迭代交由多个线程
 79      * @since 1.8
 80      */
 81     @Override//重写父类
 82     default Spliterator<E> spliterator() {
 83         return Spliterators.spliterator(this, 0);
 84     }
 85 
 86     /**
 87      * jdk8新增
 88      * 大意为:
 89      * 将默认的迭代器拆分后的结果,聚合为流,该流并非io中的流,
 90      * 是一种类似于数据排序操作流
 91      * @since 1.8
 92      */
 93     default Stream<E> stream() {
 94         return StreamSupport.stream(spliterator(), false);
 95     }
 96 
 97     /**
 98      * jdk8新增
 99      * 同上,但是具体其他的实现中,因为可并行,所以可能是线程不安全的
100      *
101      * @since 1.8
102      */
103     default Stream<E> parallelStream() {
104         return StreamSupport.stream(spliterator(), true);
105     }
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);
    }
}

五、Collection是所有集合的基类,因此接口中抽象的操作都是集合的共性操作

集合作为容器,其体系中的所有集合都包括了:

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

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

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

  除此之外,提供了java8的分离接口,聚合接口,为了大容量集合的多线程操作

 


原文地址:https://www.cnblogs.com/yuarvin/p/13528371.html