Java容器(一)—— 「容器的族譜」

基本概念

在Java當中,如果有一系列類專門用來存放其它類的對象,這個類就叫做容器,或者就叫做集合,集合就是將若干性質相同或相近的類對象組合在一起而形成的一個整體。
容器的內容是我們工作中必須要深入學習和掌握的,因此也是我們面試必問、必考的問題,重要性毋庸置疑。

容器的前身應該是數組,數組也是用於存放對象的,但是數組存在結構單一、功能簡單以及容量固定的問題,因此容器就誕生了。

容器與數組的區別與聯繫:
1、容器不是數組,不能通過下標的方式訪問容器中的元素
2、數組的所有功能通過Arraylist容器都可以實現,只是實現的方式不同
3、如果非要將容器當做一個數組來使用,通過toArraylist方法返回的就是一個數組

容器的大族譜

容器按照存放數據的特性主要分爲兩大類,Collection以及Map。

1. Collection
一個獨立元素的序列,這些元素都服從一條或多條規則。其中List必須按照插入的順序保存元素、Set不能有重複的元素、Queue按照排隊規則來確定對象的產生順序(通常也是和插入順序相同)
這裏寫圖片描述

List:一個有序集合,可以包含重複元素。你可以通過它的索引來訪問任何元素。List更像長度動態變換的數組。
Set:一個不能包含重複元素的集合。這個接口對數學集合抽象進行建模,被用來代表集合,就如一副牌。
Queue:隊列是一種特殊的線性表,它只允許在表的前端(front)進行刪除操作,而在表的後端(rear)進行插入操作。進行插入操作的端稱爲隊尾,進行刪除操作的端稱爲隊頭。隊列中沒有元素時,稱爲空隊列。
Deque:雙向隊列,同時支持在隊列的前後端插入和刪除。

2.Map
通過Key-Value的方式進行存儲,允許通過Key方式查找Value。

List族譜

這裏寫圖片描述
List的主要實現類如下表

實現類 內部數據結構 是否併發安全 併發安全實現方式
ArrayList 數組 N/A
LinkedList 雙向鏈表 N/A
Vector 數組 同步方法
Stack 數組/棧 同步方法
CopyOnWriteArrayList 數組 ReentrantLock

Vector、Stack不推薦使用,單線程環境下推薦使用ArrayList,多線程環境下考慮CopyOnWriteArrayList(修改較多容易消耗大量內存,可以合併修改)或者使用Collections類的同步List靜態方法來轉換爲同步List。

Set 族譜

這裏寫圖片描述
Set的主要實現類如下表

實現類 內部數據結構 是否有序 有序的方式 是否併發安全 併發安全實現方式
HashSet 內置對象HashMap N/A N/A
LinkedHashSet 內置對象LinkedHashMap 按照添加順序有序 N/A
CopyOnWriteArraySet 內置對象CopyOnWriteArrayList 按照添加順序有序 CopyOnWriteArrayList中是使用ReentrantLock保障併發安全
TreeSet 內置對象TreeMap 通過實現Comparable進行比較排序 N/A
ConcurrentSkipListSet 內置對象ConcurrentSkipListMap 通過實現Comparable進行比較排序 ConcurrentSkipListMap中使用CAS保障併發安全

Queue族譜

這裏寫圖片描述

Queue主要分爲兩大類,阻塞隊列BlockingQueue以及非阻塞隊列,具體實現類如下

實現類 內部數據結構 是否支持比較排序 有序的方式 是否併發安全 併發安全實現方式
PriorityQueue 數組 支持Comparable進行比較排序 N/A
ConcurrentLinkedQueue 鏈表 默認添加順序 CAS設計
LinkedBlockingQueue 鏈表 默認添加順序 ReentrantLock+Condition
DelayQueue 內置對象PriorityQueue 支持Comparable進行比較排序 ReentrantLock
ArrayBlockingQueue 數組 默認添加順序 ReentrantLock+Condition
LinkedTransferQueue 鏈表 默認添加順序 CAS設計
SynchronousQueue 鏈表 默認添加順序 CAS設計
PriorityBlockingQueue 數組 通過實現Comparable進行比較排序 ReentrantLock+Condition

Map族譜

這裏寫圖片描述

實現類 內部數據結構 是否支持比較排序 有序的方式 是否併發安全 併發安全實現方式
HashMap 數組+鏈表(解決Hash衝突)+紅黑樹 按hash值存儲 N/A
LinkedHashMap HashMap基礎上加上存儲元素添加順序的鏈表 默認添加順序 N/A
IdentityHashMap 數組 按hash值存儲 N/A
WeakHashMap 數組+鏈表 按hash值存儲 N/A
TreeMap 紅黑樹 支持Comparable進行比較排序 N/A
ConcurrentSkipListMap 跳錶 支持Comparable進行比較排序 CAS設計
ConcurrentHashMap 同HashMap 按hash值存儲 CAS設計
EnumMap 數組 枚舉類型下定義的值順序一致 N/A
HashTable 數組+鏈表(解決Hash衝突) 按hash值存儲 同步方法
Properties 同HashTable 按hash值存儲 同步方法

Map中HashMap、LinkedHashMap、ConcurrentHashMap使用的最多,HashTable不推薦使用,併發環境下效率較低且不支持Fail-Fast。

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