Java基础之Collections框架及其源码分析Collections接口

Java基础之Collections框架及其源码分析


集合有时候称为容器,是将多个元素组合成一个单元的简单对象。集合用于存储、检索、操作和通信聚合数据。

Collections接口层级

在这里插入图片描述
Collections集合接口封装了不同类型的集合,这些接口允许对集合的操作独立于它们表示的细节。Collections集合接口是Java集合框架的基础。
如上图所示有很多子接口:
Set: 使用过set集合的应该大概了解了set的使用。set是不能包含重复元素的集合,
SortedSet:只是Set是有序形式。
List:有序集合(有时称为序列)。列表可以包含重复的元素。列表的用户通常可以精确地控制每个元素在列表中的位置,并且可以通过元素的整数索引(位置)访问元素。
Queue:队列,使用先进先出的原则(FIFO)。
Deque:双向队列,Deques可以作为先进先出(FIFO)和后进先出(LIFO)两种形式使用。在deque中,可以在两端插入、检索和删除所有新元素。
Map:以key-value映射元素,不能包括相同的Key,一个key最多只能关联一个值。
SortedMap:只是Map是有序形式。

申明Collections

public interface Collection…定义一个Collection接口。

源码

Collection继承了Iterable接口,实现迭代器接口。

public interface Collection<E> extends Iterable<E> {
    /**
     返回集合中元素个数 ,如果集合中的元素大于Integer.MAX_VALUE,将返回Integer.MAX_VALUE
     */
    int size();

    /**
     * 返回集合是否为空
     */
    boolean isEmpty();

    /**
     *返回集合中是否包含指定元素
     */
    boolean contains(Object o);

    /**
    返回此集合中元素的迭代器
     */
    Iterator<E> iterator();

    /**
     * 返回一个数组包含集合中的所有元素
    如果这个集合保证了迭代器返回元素的顺序,那么这个方法必须以相同的顺序返回元素
     *
     */
    Object[] toArray();

    /**
     * 指定相关类型的包含集合中所有元素的数组(指定类型)
     */
    <T> T[] toArray(T[] a);
    /**
     * 确保此集合包含指定的元素,添加元素,如果操作成功,将返回true,否则返回true,如果限制集合元素不能重复,添加相同的元素将返回false
     */
    boolean add(E e);

    /**
     * 移除集合中指定的元素返回操作的结果
     */
    boolean remove(Object o);

    /**
     *判断集合中是否包含指定集合中的所有元素
     */
    boolean containsAll(Collection<?> c);

    /**
     * 添加指定集合中所有元素到当前的集合中
     */
    boolean addAll(Collection<? extends E> c);

    /**
     * 当前集合中删除指定集合中所有的元素
     */
    boolean removeAll(Collection<?> c);

    /**
    	JDK 1.8支持lambda表达式
    	当前集合中删除指定集合中所有的元素,如果出现异常,交给Predicate处理
     */
    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();

    /**
     * 比较指定的对象与此集合是否相等.
     */
    boolean equals(Object o);

    /**
     * 返回集合的hashCode值. 
     */
    int hashCode();

    /**
    	JDK1.8之后版本使用,default也是1.8使用,接口默认方法
     *  在此集合的元素上创建一个Spliterator
     */
    @Override
    default Spliterator<E> spliterator() {
        return Spliterators.spliterator(this, 0);
    }

    /**
    JDK1.8之后版本使用,default也是1.8使用,接口默认方法
     *返回一个顺序的Stream,将此集合作为其源
     */
    default Stream<E> stream() {
        return StreamSupport.stream(spliterator(), false);
    }

    /**
    JDK1.8之后版本使用,使用并行流处理集合,包括filter,group等操作,,default也是1.8使用,接口默认方法
     *返回一个可能是并行的Stream,将此集合作为其源。此方法允许返回顺序流。
     */
    default Stream<E> parallelStream() {
        return StreamSupport.stream(spliterator(), true);
    }
}

看到Collections集合顶层的接口,里面的相关方法,我们知道List,Set等子集合接口里面的方法形式。并且了解了我们使用lambda进行操作List的时候相关实现所使用的方法。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章