ArrayList:
Object[] 數(shù)組實現(xiàn)
default_capacity = 10
擴容: newCapacity = oldCapacity + (oldCapacity >> 1), 最大值為Integer.MAX_VALUE
modCount: 用于迭代器的并發(fā)修改檢查令境, 迭代過程中若發(fā)現(xiàn)其他線程修改了鏈表,拋出ConCurrentModificationException
LinkedList:
沒有什么特別要記的
HashMap:
數(shù)組 + 鏈表 + 紅黑樹(jdk1.8)
default_capacity = 1 << 4
terrfiy_threshold = 8, 超過此值鏈表轉(zhuǎn)為紅黑樹
loadFactor = 0.75
插入位置:table[(h = hash(Object o)) & capacity - 1]
擴容: 2倍, 發(fā)生在size超過threshold(capacity * loadfactor)
擴容后重hash: 對于某條鏈表上的node來講益涧, 新位置有兩種情況: if e.hash & oldCapacity == 0,newPosition = oldPosition; else newPosition = oldPosition + oldCapacity;
LinkedHashMap extends HashMap:
Entry extends Node,在Node基礎(chǔ)上添加了before,after指針逐哈,維護一條帶頭尾結(jié)點的雙向鏈表吗冤,鏈表有兩種順序:訪問順序,最近訪問的在鏈表尾部嘲碧; 插入順序
PriorityQueue:
Object[]數(shù)組 + 最大堆實現(xiàn)
對于隊列數(shù)據(jù)要求數(shù)據(jù)自身實現(xiàn)Comparable接口稻励,或者創(chuàng)建隊列時傳入Comparator,目的都是為了可以對數(shù)據(jù)進行比較
插入數(shù)據(jù)時愈涩, 先插到最后望抽, 然后siftUp調(diào)整堆, 取出數(shù)據(jù)時履婉,移除堆頂數(shù)據(jù)煤篙,然后將最后一個數(shù)據(jù)放置堆頂,siftDown調(diào)整堆
擴容: newCapacity = oldCapacity + (oldCapacity < 64) ? (oldCapacity + 2) : (oldCapacity >> 1)
ThreadLocal<T>:
Thread內(nèi)部維護一個ThreadLocalMap對象毁腿, 這個Map的key是ThreadLocal辑奈, 值是線程需要存的數(shù)據(jù)。ThreadLocal其實就是線程的管家已烤,所有線程私有的東西都可以交給它來管理鸠窗。如果碰到共享的數(shù)據(jù),那么ThreadLocal可以為線程保存一份私有副本胯究,這樣就可以避免使用鎖而提高性能了稍计。