集合

Java集合主要有兩個接口派生而出:Collection和Map,他們都是集合框架的子接口,下面兩天分別是Collection和Map的繼承樹。java

集合的兩大父接口

Collection

Collection集合體系下又主要包含Queue、List、Set三個接口。數組

集合.PNG

能夠看到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

Map接口的繼承關係以下:對象

集合1.PNG

對各集合的簡單總結

集合的基本使用很簡單,之後仍是主要集中在對各集合源碼的分析。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都必須是一個枚舉類的枚舉值。

相關文章
相關標籤/搜索