一文圖解認識wwwhj8828netJava 集合I8669I44445原理 & 性能

容器是Java語言學習中重要的一部分。泥瓦匠我的感覺是剛開始挺難學的,但等你熟悉它,接觸多了,也就“順理成章”地知道了。Java的容器類主要由兩個接口派生而出:Collection和Map。

一、Collection vs Collections
首先,Collection 和 Collections 是兩個不同的概念。之所以放在一起,是爲了更好的比較。Collection是容器層次結構中根接口。而Collections是一個提供一些處理容器類靜態方法的類。

一文圖解認識 Java 集合原理 & 性能
JDK不提供Collection接口的具體實現,而是提供了更加具體的子接口(如Set和List)實現。

那Collection接口存在有何作用呢?存在即是道理。

原因在於:所有容器的實現類(如ArrayList實現了List接口,HashSet實現了Set接口)提供了兩個‘標準’的構造函數來實現:1、一個無參的構造方法(void)2、一個帶有Collection類型單參數構造方法,用於創建一個具有其參數相同元素新的Collection及其實現類等。實際上:因爲所有通用的容器類遵從Collection接口,用第二種構造方法是允許容器之間相互的複製。

二、Collection的類層次結構
下面的圖是關於Collection的類的層次結構。

Set:

一個不包括重複元素(包括可變對象)的Collection,是一種無序的集合。Set不包含滿足 a.equals(b) 的元素對a和b,並且最多有一個null。實現Set的接口有:EnumSet、HashSet、TreeSet等。下圖是Set的JDK源碼UML圖。

List:

一個有序的Collection(也稱序列),元素可以重複。確切的講,列表通常允許滿足 e1.equals(e2) 的元素對 e1 和 e2,並且如果列表本身允許 null 元素的話,通常它們允許多個 null 元素。實現List的有:ArrayList、LinkedList、Vector、Stack等。下圖是List的JDK源碼UML圖。

Queue:

一種隊列則是雙端隊列,支持在頭、尾兩端插入和移除元素,主要包括:ArrayDeque、LinkedBlockingDeque、LinkedList。另一種是阻塞式隊列,隊列滿了以後再插入元素則會拋出異常,主要包括ArrayBlockQueue、PriorityBlockingQueue、LinkedBlockingQueue。雖然接口並未定義阻塞方法,但是實現類擴展了此接口。下圖是Queue的JDK源碼UML圖。

三、Map的類的層次結構
下面的圖是Map的層次結構圖

Map:

是一個鍵值對的集合。也就是說,一個映射不能包含重複的鍵,每個鍵最多映射到一個值。該接口取代了Dictionary抽象類。實現map的有:HashMap、TreeMap、HashTable、Properties、EnumMap。下圖是Map的JDK源碼UML圖。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章