咱们知道java容器类类库的用途是“保存对象”,容器最顶层分为两个Collection和Map,其他的都是继承这连个接口,Collection存储一个独立元素的序列,下面有List 、Set、Queue,而Map主要存储 “键值对”对象,下面实现版本有hashMap和TreeSet。(而List、Set、Queue下面基本各有两三个实现版本。)java
既然咱们要阅读容器类的jdk源码,固然得从Collection开始,他是大部分容器类的父接口,里面只有函数声明,声明了一组Collection类型容器的操做方法,可是没有实现,等其子类去实现。其代码以下(基于jdk1.6):数组
package java.util; public interface Collection<E> extends Iterable<E> { //返回容器中元素的个数 int size(); //若是集合元素为空,返回true,不然false boolean isEmpty(); //若是集合包含这个元素,返回true,不然false,若是元素类型和本集合不同,抛出ClassCastException异常,若是元素null,而集合不容许为null,则抛出NullPointerException boolean contains(Object o); //返回集合类的迭代器,能够用来遍历容器中的元素 Iterator<E> iterator(); //将该集合转换为数组 Object[] toArray(); //将集合类转换为更为具体类型的数组 <T> T[] toArray(T[] a); //将元素添加到容器,成功返回true boolean add(E e); //从容器中删除元素,成功返回true boolean remove(Object o); //大块操做 //若是容器包含c容器里面的全部元素,则返回true boolean containsAll(Collection<?> c); //添加一个集合他容器中 boolean addAll(Collection<? extends E> c); //删除集合中所包含的c集合里面的元素,相似求交集 boolean removeAll(Collection<?> c); //容器中只留下和c集合里面相同的元素,c集合的内容不变,变的是本身 boolean retainAll(Collection<?> c); //移除容器中全部的元素 void clear(); // Comparison and hashing //指定的对象与本集合进行比较,判断相等性 boolean equals(Object o); //返回这个集合的hash code int hashCode(); }
能够看的出Collection继承了Iterable接口,而Iterable接口的内容以下:函数
取迭代器接口类code
public interface Iterable<T> { /** * 返回一个在类型T的元素集合上的迭代器。 * * @return an Iterator. */ Iterator<T> iterator(); }
因此之后只要你建立了实现该Iterable的类,就能够用foreach语句来遍历了,因此全部的继承Collection均可以用foreach语句来遍历了。对象
迭代器接口类继承
public interface Iterator<E> { //判断是否还有元素 boolean hasNext(); //返回下一个元素 E next(); //删除元素 void remove(); }