前言
上一篇文章对Java集合API框架有了一个简单的了解。对于各个接口,实现类都有了一个
简单的认识。上文链接:http://blog.csdn.net/kiritor/article/details/8868943。 接下来笔者将
深入JDK源码去解决上一篇文章遗留下来的问题,并做一些更加深入的探究与思考。
Collection接口设计
Collection接口是最基本的容器接口,继承至Iterable接口(主要通过其进行产生迭代器
逐一的进行元素访问)。其中的元素允许重复,可以无序。JDK没有提供直接实现Collection
接口的实现类,它提供更具体的子接口List、Set。
所有实现Colection的类原则上都应该提供两个标准的构造函数:
1、无参构造函数用于创建一个空的容器,
2、有参构造函数用于创建一个新的Collection,且这个新的Collection和传入的collection
具有相同的元素。
源代码解析
package com.kiritor; import java.util.Iterator; /** * Collection接口源码分析 * @author Kiritor*/ public interface Collection<E> extends Iterable<E> { /**返回当前集合中的元素个数*/ int size(); /**当集合为空的时候返回true*/ boolean isEmpty(); /**对于集合中的所有元素 e * (o==null ? e==null : o.equals(e)) */ boolean contains(Object o); /**产生一个迭代器用户集合的遍历*/ Iterator<E> iterator(); /**返回元素组成的一个数组,这个数组 * 一定是新生成的一个数组,集合并不对其引用进行维护 * 换句话说,返回数组的修改并不反映在集合上*/ Object[] toArray(); /**同样是返回集合所有元素组成的数组 * 不同的是返回的数组的类型是参数指定的数组类型 * 因此,该方法可能会抛出 * ArrayStoreException - 如果指定数组的运行时类型不是此 collection * 每个元素运行时类型的超类型 * NullPointerException - 如果指定的数组为 null */ <T> T[] toArray(T[] a); /**插入元素 * UnsupportedOperationException - 如果此 collection 不支持 add 操作 ClassCastException - 如果指定元素的类不允许它添加到此 collection 中 NullPointerException - 如果指定的元素为 null,并且此 collection 不允许 null 元素 IllegalArgumentException - 如果元素的某属性不允许它添加到此 collection 中 IllegalStateException - 如果由于插入限制,元素不能在此时间添加 */ boolean add(E e); /**删除元素0 *也就是说对于集合中的元素满足(o==null ? e==null : o.equals(e)) *则返回true。 *ClassCastException - 如果指定元素的类型与此 collection 不兼容(可选) NullPointerException - 如果指定的元素为 null,并且此 collection 不允许 null 元素(可选)。 UnsupportedOperationException - 如果此 collection 不支持 remove 操作 */ boolean remove(Object o); /** * 移除没有包含在c中的集合的元素*/ boolean containsAll(Collection<?> c); boolean addAll(Collection<? extends E> c); boolean removeAll(Collection<?> c); boolean retainAll(Collection<?> c); void clear(); boolean equals(Object o); /**产生hashCode*/ int hashCode(); }以上代码是从JDK源码中拷贝出来的,正确性可保证!
通过源码和其的异常抛出情况可以看出的是,Collection对于其操作是有一定的限制的
例如 :UnsupportedOperationException,不支持操作异常。这种限制是通过其子接口的具体
实现类来体现的。
接下来笔者一一探究。