JDK源码阅读——Collection

来源:互联网 发布:奔腾楚天激光机编程 编辑:程序博客网 时间:2024/06/05 16:01

今天开始阅读JDK源码,不知道自己能坚持到哪一步。希望几个月甚至若干年以后,再看这篇文章,我能够庆幸自己坚持了下来。
JDK1.8的代码真是茫茫多,随便翻一个String类就有4000行,因此我将只挑选常用的方法进行阅读。
一开始不知从哪下手,干脆就以java集合框架的根源——Collection接口读起吧。

public interface Collection<E> extends Iterable<E>

Collection接口继承了Iterable接口,因此可以用迭代器访问其中的元素
下面是一些常用方法:

int size();//返回Collection元素个数boolean isEmpty();//判断Collection是否为空boolean contains(Object o);//判断元素中是否包含oIterator<E> iterator();//返回迭代器Object[] toArray();//返回一个包含Collection中所有元素的数组,toArray方法需要为这个数组分配内存空间boolean add(E e);//将元素e加入Collection中,添加成功返回true,添加失败(例如这是个Set,不允许包含重复元素)则返回falseboolean remove(Object o);//将o从Collection中去除,成功返回trueboolean containsAll(Collection<?> c);//判断Collection是否包含c中所有元素boolean addAll(Collection<? extends E> c);//将C中所有元素加入Collection中,返回值同add方法boolean removeAll(Collection<?> c);//将c中所有元素从Collection中去除boolean retainAll(Collection<?> c);//从Collection中移除所有不在c中的元素void clear();//清除Collection中所有元素boolean equals(Object o);//判断Collection与o是否相等int hashCode();//返回Collection的hash值

除此之外,还有default方法removeIf,该方法从Collection中移除符合条件的元素:

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

在java 8中,default和static修饰的关键字均可以在接口中被实现,其中default关键字的作用是为了在接口中添加新的方法之后仍保持兼容。继承了该接口的类可以覆盖default方法,但这不是必须的。
需要注意的是,当两个接口给同一个方法都提供了default实现的时候,这个方法是无法被调用的,除非实现类也实现了这个default方法。
回到removeIf方法上,该方法首先判断filter是否为空,若不为空则使用迭代器依次返回Collection的元素,并调用filter.test方法进行验证,符合条件的元素被移除。若有元素被移除,removeIf方法返回true。

0 0
原创粉丝点击