以前,在"Java 集合系列目錄(Category)"中,講解了Java集合包中的各個類。接下來,將展開對JUC包中的集合進行學習。在學習以前,先溫習一下"Java集合包"。本章內容包括:
Java集合包
JUC中的集合類
html
轉載請註明出處:http://www.cnblogs.com/skywang12345/p/3498454.htmljava
在「Java 集合系列01之 整體框架」中,介紹java集合的架構。主體內容包括Collection集合和Map類;而Collection集合又能夠劃分爲List(隊列)和Set(集合)。數組
1. List的實現類主要有: LinkedList, ArrayList, Vector, Stack。安全
(01) LinkedList是雙向鏈表實現的雙端隊列;它不是線程安全的,只適用於單線程。
(02) ArrayList是數組實現的隊列,它是一個動態數組;它也不是線程安全的,只適用於單線程。
(03) Vector是數組實現的矢量隊列,它也一個動態數組;不過和ArrayList不一樣的是,Vector是線程安全的,它支持併發。
(04) Stack是Vector實現的棧;和Vector同樣,它也是線程安全的。多線程
2. Set的實現類主要有: HastSet和TreeSet。架構
(01) HashSet是一個沒有重複元素的集合,它經過HashMap實現的;HashSet不是線程安全的,只適用於單線程。
(02) TreeSet也是一個沒有重複元素的集合,不過和HashSet不一樣的是,TreeSet中的元素是有序的;它是經過TreeMap實現的;TreeSet也不是線程安全的,只適用於單線程。併發
3.Map的實現類主要有: HashMap,WeakHashMap, Hashtable和TreeMap。框架
(01) HashMap是存儲「鍵-值對」的哈希表;它不是線程安全的,只適用於單線程。
(02) WeakHashMap是也是哈希表;和HashMap不一樣的是,HashMap的「鍵」是強引用類型,而WeakHashMap的「鍵」是弱引用類型,也就是說當WeakHashMap 中的某個鍵再也不正常使用時,會被從WeakHashMap中被自動移除。WeakHashMap也不是線程安全的,只適用於單線程。
(03) Hashtable也是哈希表;和HashMap不一樣的是,Hashtable是線程安全的,支持併發。
(04) TreeMap也是哈希表,不過TreeMap中的「鍵-值對」是有序的,它是經過R-B Tree(紅黑樹)實現的;TreeMap不是線程安全的,只適用於單線程。
更多關於這些集合類的介紹,能夠參考「Java 集合系列目錄(Category)」。高併發
爲了方便,咱們將前面介紹集合類統稱爲」java集合包「。java集合包大可能是「非線程安全的」,雖然能夠經過Collections工具類中的方法獲取java集合包對應的同步類,可是這些同步類的併發效率並非很高。爲了更好的支持高併發任務,併發大師Doug Lea在JUC(java.util.concurrent)包中添加了java集合包中單線程類的對應的支持高併發的類。例如,ArrayList對應的高併發類是CopyOnWriteArrayList,HashMap對應的高併發類是ConcurrentHashMap,等等。工具
JUC包在添加」java集合包「對應的高併發類時,爲了保持API接口的一致性,使用了」Java集合包「中的框架。例如,CopyOnWriteArrayList實現了「Java集合包」中的List接口,HashMap繼承了「java集合包」中的AbstractMap類,等等。得益於「JUC包使用了Java集合包中的類」,若是咱們瞭解了Java集合包中的類的思想以後,理解JUC包中的類也相對容易;理解時,最大的難點是,對JUC包是如何添加對「高併發」的支持的!
下面,咱們先了解JUC包中集合類的框架;爲了方便講訴,我將JUC包中的集合類劃分爲3部分來進行說明。在簡單的瞭解JUC包中集合類的框架以後,後面的章節再逐步對各個類進行介紹。
1. List和Set
JUC集合包中的List和Set實現類包括: CopyOnWriteArrayList, CopyOnWriteArraySet和ConcurrentSkipListSet。ConcurrentSkipListSet稍後在說明Map時再說明,CopyOnWriteArrayList 和 CopyOnWriteArraySet的框架以下圖所示:
(01) CopyOnWriteArrayList至關於線程安全的ArrayList,它實現了List接口。CopyOnWriteArrayList是支持高併發的。
(02) CopyOnWriteArraySet至關於線程安全的HashSet,它繼承於AbstractSet類。CopyOnWriteArraySet內部包含一個CopyOnWriteArrayList對象,它是經過CopyOnWriteArrayList實現的。
2. Map
JUC集合包中Map的實現類包括: ConcurrentHashMap和ConcurrentSkipListMap。它們的框架以下圖所示:
(01) ConcurrentHashMap是線程安全的哈希表(至關於線程安全的HashMap);它繼承於AbstractMap類,而且實現ConcurrentMap接口。ConcurrentHashMap是經過「鎖分段」來實現的,它支持併發。
(02) ConcurrentSkipListMap是線程安全的有序的哈希表(至關於線程安全的TreeMap); 它繼承於AbstractMap類,而且實現ConcurrentNavigableMap接口。ConcurrentSkipListMap是經過「跳錶」來實現的,它支持併發。
(03) ConcurrentSkipListSet是線程安全的有序的集合(至關於線程安全的TreeSet);它繼承於AbstractSet,並實現了NavigableSet接口。ConcurrentSkipListSet是經過ConcurrentSkipListMap實現的,它也支持併發。
3. Queue
JUC集合包中Queue的實現類包括: ArrayBlockingQueue, LinkedBlockingQueue, LinkedBlockingDeque, ConcurrentLinkedQueue和ConcurrentLinkedDeque。它們的框架以下圖所示:
(01) ArrayBlockingQueue是數組實現的線程安全的有界的阻塞隊列。
(02) LinkedBlockingQueue是單向鏈表實現的(指定大小)阻塞隊列,該隊列按 FIFO(先進先出)排序元素。
(03) LinkedBlockingDeque是雙向鏈表實現的(指定大小)雙向併發阻塞隊列,該阻塞隊列同時支持FIFO和FILO兩種操做方式。
(04) ConcurrentLinkedQueue是單向鏈表實現的無界隊列,該隊列按 FIFO(先進先出)排序元素。
(05) ConcurrentLinkedDeque是雙向鏈表實現的無界隊列,該隊列同時支持FIFO和FILO兩種操做方式。
接下來,將逐個對JUC包中的集合類進行學習。
更多內容