Collection的子類有List和Set,Map 是獨立的接口蔚润。
一磅氨、Map
1.HashMap
Hashmap 的數(shù)據(jù)結構是數(shù)組類型,每個數(shù)組的元素是一個鏈表嫡纠,在jdk 8 中 鏈表長度超過8烦租,鏈表會轉(zhuǎn)化成紅黑樹以增強查找效率。HashMap不是線程安全的除盏。LinkedhashMap 是HashMap的子類叉橱,可以用于構建LRUCache。
面試常見問題:HashMap 數(shù)據(jù)結構痴颊。
線程安全赏迟,為什么不安全屡贺,resize不安全原理蠢棱。
put锌杀,get 過程。
2.ConcurrentMap
線程安全Map泻仙,jdk8 中優(yōu)化了同步鎖糕再,使用了Cas鎖,鎖的粒度變小玉转。
弱一致性:ConcurrentHashMap的迭代器創(chuàng)建后突想,就會按照哈希表結構遍歷每個元素,但在遍歷過程中究抓,內(nèi)部元素可能會發(fā)生變化猾担,如果變化發(fā)生在已遍歷過的部分,迭代器就不會反映出來刺下,而如果變化發(fā)生在未遍歷過的部分绑嘹,迭代器就會發(fā)現(xiàn)并反映出來,這就是弱一致性橘茉。
3.TreeMap
線程安全Map工腋,內(nèi)部數(shù)據(jù)結構是紅黑樹,同步鎖會整體鎖畅卓。鎖粒度較大擅腰。TreeMap 是有序的,插入的時候會進行比較翁潘。
二趁冈、Collection
1.List
ArrayList 內(nèi)部使用數(shù)組,LinkedList 使用鏈表數(shù)據(jù)結構唐础。二者對于不同場景效率不同箱歧,ArrayList 按下標查詢效率高,LinkedList 隨機插入效率較高一膨。
2.Set
HashSet內(nèi)部使用HashMap呀邢,不允許存在相同的值。
集合方面的類是java 基礎豹绪,需要了解其實現(xiàn)原理价淌,是否線程安全,不安全的場景瞒津。