您的位置:首页 > 编程语言 > Java开发

JDK源码阅读——Collection

2016-03-19 22:47 519 查看
今天开始阅读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);//判断元素中是否包含o
Iterator<E> iterator();//返回迭代器
Object[] toArray();//返回一个包含Collection中所有元素的数组,toArray方法需要为这个数组分配内存空间
boolean add(E e);//将元素e加入Collection中,添加成功返回true,添加失败(例如这是个Set,不允许包含重复元素)则返回false
boolean remove(Object o);//将o从Collection中去除,成功返回true
boolean 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。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java jdk