一、傳統(tǒng)集合
collection:
list:ArrayList LinkedList Vector Stack
set:HashSet TreeSet
Map:HashMap TreeMap
二、簡單的不再多說,只說不會(huì)的!
1、Vector: 默認(rèn)創(chuàng)建大小為10的Object數(shù)組(所以是基于數(shù)組實(shí)現(xiàn)的) add, remove方法都是添加了 synchronized關(guān)鍵字的 所以線程安全
vector 擴(kuò)大數(shù)組 是擴(kuò)大兩倍 線程安全
ArrayList 擴(kuò)大 *1.5+1 線程不安全
2、Stack : 先進(jìn)后出
繼承于Vector,所以也是線程安全的!
push pop peek
3
HashSet 基于HashMap實(shí)現(xiàn),使用的是hashMap中的Key, 無容量限制 ,非線程安全
TreeSet 基于TreeMap實(shí)現(xiàn), 支持排序 ,非線程安全
4
HashMap 基于Entry數(shù)組實(shí)現(xiàn), key,value 后出entry, 無容量限制,非線程安全
TreeMap 基于 紅黑樹實(shí)現(xiàn),無容量限制,非線程安全
三、各種實(shí)現(xiàn)方式
ArraylIst 數(shù)組
linkedList 雙向 鏈表
Vector 數(shù)組
Stack 數(shù)組
HashSet 基于HashMap實(shí)現(xiàn)
TreeSet 基于TreeMap 實(shí)現(xiàn)
HashMap 基于Entry對象的數(shù)組實(shí)現(xiàn)
TreeMap 基于 紅黑樹實(shí)現(xiàn)
四、傳統(tǒng)集合的一些性能
1、set 和 map 類型的查找是通過hash后,再到鏈表上查找,所以速度相對來說要快!
2、當(dāng)數(shù)量超過萬級別:
插入:arrayList Vector的影響比較大,其他基本沒什么變化
查找和刪除;list 的性能下降比較嚴(yán)重,set和map基本不受影響
五、并發(fā)集合
以下都是線程安全的:
ConcurrentHashMap 在每一個(gè)分段上都用鎖進(jìn)行保護(hù),從而讓鎖的粒度更精細(xì)一些,并發(fā)性能更好,而HashMap沒有鎖機(jī)制,不是線程安全的。
CopyOnWriteArrayList 在讀寫操作無鎖的 ArrayList
CosyOnWriteArraySet 基于CopyOnWriteArrayList實(shí)現(xiàn)
ArrayBlockingQueue 基于數(shù)組,先進(jìn)先出,阻塞讀寫
ArrayBlockingQueue(int capacity)創(chuàng)建一個(gè)帶有給定的(固定)容量和默認(rèn)訪問策略的 ArrayBlockingQueue。同時(shí)初始化鎖和兩個(gè)鎖上的condition,一個(gè)為notEmpty 一個(gè)為notFull
六、原子操作
AtomicInteger AtomicLong AtomicBoolean
七、Executors
newCachedThreadPool()
創(chuàng)建一個(gè)可根據(jù)需要?jiǎng)?chuàng)建新線程的線程池,但是在以前構(gòu)造的線程可用時(shí)將重用它們。
newFixedThreadPool(int nThreads)
創(chuàng)建一個(gè)可重用固定線程數(shù)的線程池,以共享的無界隊(duì)列方式來運(yùn)行這些線程。
newSingleThreadExecutor()
創(chuàng)建一個(gè)使用單個(gè) worker 線程的 Executor,以無界隊(duì)列方式來運(yùn)行該線程。
newScheduledThreadPool(int corePoolSize)
創(chuàng)建一個(gè)線程池,它可安排在給定延遲后運(yùn)行命令或者定期地執(zhí)行。
適合于:定時(shí)或者延遲的任務(wù),在異步操作中需要 超時(shí)回調(diào)的場景
更多信息請查看IT技術(shù)專欄