Java集合主要有兩個接口派生而出:Collection和Map,他們都是集合框架的子接口,下面兩天分別是Collection和Map的繼承樹。java
Collection集合體系下又主要包含Queue、List、Set三個接口。數組
能夠看到Iterable是Collection的父接口,Iterable裏有以下方法:框架
Iterator<T> iterator(); default void forEach(Consumer<? super T> action) { Objects.requireNonNull(action); for (T t : this) { action.accept(t); } }
上面兩個方法對應兩種方式遍歷集合。
其中Cusumer是一個函數式接口,表示遍歷集合時進行的操做,可用使用lambda表達式來表示。
Iterator也是一個用於便利集合的接口,它有以下方法:函數
boolean hasNext(); E next(); default void remove() { throw new UnsupportedOperationException("remove"); } default void forEachRemaining(Consumer<? super E> action) { Objects.requireNonNull(action); while (hasNext()) action.accept(next()); }
能夠看到在用Iterator遍歷集合是不能刪除元素,不然拋出異常。
裏面還有一個forEachRemaining方法,又提供了一種遍歷集合的方式。ui
List接口還有一個以下方法:this
ListIterator<E> listIterator();
ListIterator能夠雙向遍歷一個List,它包含以下方法:code
boolean hasNext(); E next(); boolean hasPrevious(); E previous();
Map接口的繼承關係以下:對象
集合的基本使用很簡單,之後仍是主要集中在對各集合源碼的分析。blog
HashSet判斷兩個元素相等的標準是兩個對象經過equals()方法比較相等,而且兩個對象的hashCode()方法返回也相等。繼承
LinkedHash也根據元素的hashCode值來決定元素的存儲位置,同時使用鏈表維持元素的順序。
TreeSet能夠確保元素處於有序狀態。
Queue表示一個先進先出的隊列,PriorityQueue是一個優先隊列,不是按加入隊列順序保存元素的,而是按照元素大小保存的。
ArrayDeque是以數組來實現一個雙端隊列。
LinkedList既能夠看成一個雙端隊列,又能夠看成棧使用。
Properties類是Hashtable類的子類,它的key、value都是String類型。一般用來讀寫屬性文件。
WeakHashMap中的key只保留對實際對象的弱引用,這意味着若是WeakHashMap對象的key所引用的對象沒有被其它強引用變量所引用,則這些key所引用的對象可能被垃圾回收,WeakHashMap可能自動刪除這些key所對應的key-value對。
IdentityHashMap中,當且僅當兩個key嚴格相等(key1==key2)時,才認爲兩個key相等。對於普通的HashMap,只要key1與key2經過equals()方法比較返回true,且它們的hashCode值相等便可。
EnumMap是一個與枚舉類一塊兒使用的Map實現,全部的key都必須是一個枚舉類的枚舉值。