Collection接口的源码分析

集合

在分析Java的List集合的时候要先分析一下他们的公共接口Collection,这里我通过源码加上Java1.8 的帮助文档来分析。

Collection继承了Iterable,Iterable在这里做一下简单的分析:

Iterable是java.lang包里面的一个接口是个顶级接口,不再继承或实现其它的类,在Java1.8的官方文档里面这样介绍到这个接口-实现这个接口就允许一个对象实现了“for-each loop”的功能,这个功能从1.5开始。

里面有三个方法:

返回一个Iterator元素类型是泛型

Iterator<T> iterator();

迭代器对每个元素执行规定的方法直到所有给定的元素已经执行完毕,或者抛出异常

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

这个方法还在研究中,官方文档给出的介绍是根据Iterable的描述在元素里面生成一个Spliterator,目前还不知道这个类是干嘛用的

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

Collection仅仅只实现了Iterable这一个接口,下面就可以看看这个接口里面的方法

这个方法是返回collection集合里面元素的个数,如果元素的个数大于Integer的最大数,则返回Integer的最大数(看了一下Integer的最大值是2的31次方-1,最小值是-2的31次方)

int size();

这个方法就是判断collection集合是不是为空

boolean isEmpty();

如果集合里面包含传入的Obejct对象,则返回true,会抛出两个异常,一种是空指针异常,一种是

boolean contains(Object o);类不相容异常

在集合中返回一个Iterator

Iterator<E> iterator();

返回一个数组包含集合里面的所有元素。如果集合保证了元素的顺序,那么这个数组也要保证元素的顺序。这个方法是数组和集合之间的桥梁

Object[] toArray();

返回一个数组包含集合里面的所有元素。但是数组的返回值是特定的,如果元素的类型跟规定的类型相符,直接返回,否则一个新的数组返回里面是规定的类型

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

确保这个集合包含这个特殊的元素,如果此集合因调用而更改则返回true,如果此集合不允许重复并且已经包含指定元素则返回false

boolean add(E e);

如果存在该Object的话,从集合中移除该指定元素的单个实例。如果这个集合包含指定元素则返回true

boolean remove(Object o);

如果当前集合包含所有传入的集合的元素,则返回true

boolean containsAll(Collection<?> c);

将指定的集合中的所有元素添加到当前集合中

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

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

boolean removeAll(Collection<?> c);

移除满足给定条件的集合的所有元素

default boolean removeIf(Predicate<? super E> filter)

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

boolean retainAll(Collection<?> c);

移除所有集合中的元素,这个方法执行以后集合就为空了

void clear();

将指定的元素跟跟集合中中元素做对比,返回true表示相等

boolean equals(Object o);

返回一个hash值,这个接口没有实现这个方法。我们应该注意任何重写Object.equals方法也必须重写object.hashcode

int hashCode();

创建此集合中的元素的spliterator

@Override
default Spliterator<E> spliterator()

返回一个连续的的Stream对象

default Stream<E> stream()

返回一个可能的并行流,这个集合作为其源。这种方法允许返回一个顺序流。

default Stream<E> parallelStream()

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 一、基础知识:1、JVM、JRE和JDK的区别:JVM(Java Virtual Machine):java虚拟机...
    杀小贼阅读 2,563评论 0 4
  • Java集合框架 Java中封装了许多常用的数据结构,称为集合框架,可以有效组织数据,提高程序性能。最初Java只...
    Steven1997阅读 1,101评论 0 2
  • 写在前面自开始在公司实习以来,经常都要用到集合框架。不仅后台要用,在前台做数据交互的时候用得也多。所以我想着是时候...
    EakonZhao阅读 3,342评论 0 12
  • 简介 AbstractMutableList 是一个超级好用的抽象类,里面实现了好多对集合操作的直观方法,新鲜事物...
    坑吭吭阅读 2,034评论 2 2
  • 前言 本文适合有OC基础或者对iOS开发有一点了解的同学,特别是一直在用OC开发想转Swift的同学,因为我本身是...
    cmfish阅读 331评论 0 3

友情链接更多精彩内容