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
- JDK源码阅读——Collection
- JDK源码阅读-1-Collection
- JDK源码阅读之Collection分析
- JDK源码阅读之Collection集合接口
- 【JDK源码阅读1-util】Collection
- 【JDK源码阅读2-util】Collection-List
- 【JDK源码阅读6-util】Collection-Set
- 阅读源码第一天——Collection
- 【JDK源码阅读3-util】Collection-List---ArrayList
- 【JDK源码阅读4-util】Collection-List---LinkedList
- 【JDK源码阅读5-util】Collection-List---Vector
- JDK源码阅读——ArrayList(1)
- JDK源码阅读——ArrayList\LinkedList
- JDK源码阅读——ArrayList(2)
- JDK源码阅读——ArrayList
- JDK源码阅读——LinkedList
- JDK源码阅读——模拟HashMap
- jdk源码阅读——ArrayList
- 1-UFT的安装和延期
- Python OS 文件操作模块常用函数
- CodeForces 487A(水题)
- jQuery插件开发
- android-1(android环境的搭建)
- JDK源码阅读——Collection
- 玩转快速排序
- Problem G
- Qt-----反射机制
- 刚刚涉及IT领域的大三汪的小心思(第一篇博客)
- 求2个字符串的最长公共子串——矩阵法
- ldd gperftool 用法
- 使用Consul快速搭建简易分布式服务监控系统
- mysql基本操作