1、傳統集合
collection:
list:ArrayList LinkedList Vector Stack
set:HashSet TreeSet
Map:HashMap TreeMap
2、簡單的再也不多說,只說不會的!
一、Vector: 默認建立大小爲10的Object數組(因此是基於數組實現的) add, remove方法都是添加了 synchronized關鍵字的 因此線程安全
vector 擴大數組 是擴大兩倍 線程安全
ArrayList 擴大 *1.5+1 線程不安全
二、Stack : 先進後出
繼承於Vector,因此也是線程安全的!
push pop peek
3
HashSet 基於HashMap實現,使用的是hashMap中的Key, 無容量限制 ,非線程安全
TreeSet 基於TreeMap實現, 支持排序 ,非線程安全
4
HashMap 基於Entry數組實現, key,value 後出entry, 無容量限制,非線程安全
TreeMap 基於 紅黑樹實現,無容量限制,非線程安全
3、各類實現方式
ArraylIst 數組
linkedList 雙向 鏈表
Vector 數組
Stack 數組
HashSet 基於HashMap實現
TreeSet 基於TreeMap 實現
HashMap 基於Entry對象的數組實現
TreeMap 基於 紅黑樹實現
4、傳統集合的一些性能
一、set 和 map 類型的查找是經過hash後,再到鏈表上查找,因此速度相對來講要快!
二、當數量超過萬級別:
插入:arrayList Vector的影響比較大,其餘基本沒什麼變化
查找和刪除;list 的性能降低比較嚴重,set和map基本不受影響
5、併發集合
如下都是線程安全的:
ConcurrentHashMap 在每個分段上都用鎖進行保護,從而讓鎖的粒度更精細一些,併發性能更好,而HashMap沒有鎖機制,不是線程安全的。
CopyOnWriteArrayList 在讀寫操做無鎖的 ArrayList
CosyOnWriteArraySet 基於CopyOnWriteArrayList實現
ArrayBlockingQueue 基於數組,先進先出,阻塞讀寫
ArrayBlockingQueue(int capacity)建立一個帶有給定的(固定)容量和默認訪問策略的 ArrayBlockingQueue。同時初始化鎖和兩個鎖上的condition,一個爲notEmpty 一個爲notFull數組