在分析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()