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