咱們知道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(); }