JDK源码阅读——Collection
2016-03-19 22:47
519 查看
今天开始阅读JDK源码,不知道自己能坚持到哪一步。希望几个月甚至若干年以后,再看这篇文章,我能够庆幸自己坚持了下来。
JDK1.8的代码真是茫茫多,随便翻一个String类就有4000行,因此我将只挑选常用的方法进行阅读。
一开始不知从哪下手,干脆就以java集合框架的根源——Collection接口读起吧。
Collection接口继承了Iterable接口,因此可以用迭代器访问其中的元素
下面是一些常用方法:
除此之外,还有default方法removeIf,该方法从Collection中移除符合条件的元素:
在java 8中,default和static修饰的关键字均可以在接口中被实现,其中default关键字的作用是为了在接口中添加新的方法之后仍保持兼容。继承了该接口的类可以覆盖default方法,但这不是必须的。
需要注意的是,当两个接口给同一个方法都提供了default实现的时候,这个方法是无法被调用的,除非实现类也实现了这个default方法。
回到removeIf方法上,该方法首先判断filter是否为空,若不为空则使用迭代器依次返回Collection的元素,并调用filter.test方法进行验证,符合条件的元素被移除。若有元素被移除,removeIf方法返回true。
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对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- c++11 + SDL2 + ffmpeg +OpenAL + java = Android播放器
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序
- 二叉查找树