JAVA-容器(2)-Collection

(基于JDK1.8源码分析)

一,Collection

  所有实现Collection接口的类原则上应该提供两种构造函数:

  【1】无参构造-创建一个空的容器

  【2】有参构造-创建一个新的Collection,这个新的Collection和传入的Collection具有相同的元素

 

二,源码分析

  

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

    /** 集合大小 */
    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);
    /** 集合中是否包含C集合中的元素*/
    boolean containsAll(Collection<?> c);
    /** 新增集合元素*/
    boolean addAll(Collection<? extends E> c);
    /** 集合中删除C集合中有的元素*/
    boolean removeAll(Collection<?> c);

    /***/
    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;
    }

    /** 集合中只保留C集合中的元素*/
    boolean retainAll(Collection<?> c);
    /** 清空集合元素*/
    void clear();
   /** 比较集合元素是否相同*/
    boolean equals(Object o);
    /** 计算哈希码*/
    int hashCode();

    /***/
    @Override
    default Spliterator<E> spliterator() {
        return Spliterators.spliterator(this, 0);
    }
    /***/
    default Stream<E> stream() {
        return StreamSupport.stream(spliterator(), false);
    }
    /***/
    default Stream<E> parallelStream() {
        return StreamSupport.stream(spliterator(), true);
    }
}

 

posted @ 2017-03-31 18:57  wanhua.wu  阅读(157)  评论(0编辑  收藏  举报