常用集合知識

ArrayList

1、初始默認大小爲10

2、擴容條件:當add時  判斷(size+1)- elementData.length  如果大於0,需要進行擴容

3、int newCapacity = oldCapacity + (oldCapacity >> 1)  新增大小爲原來的1.5倍

HashMap

一些基於jdk1.7

1、 重要參數

      容量(默認值16),負載因子(0.75)

2、擴容條件:當put時,如果 (size >= threshold) && (null != table[bucketIndex])即size大於 (容量*負載因子) 並且該位置table中不爲null時將進行擴容,擴容後數組大小*2即table*2

3、初始化時大小參數應爲2的N次冪 new HashMap<>(32),如果不是程序會自動調整;

4、put 方法

    首先會將傳入的 Key 做 hash 運算計算出 hashcode,然後根據數組長度取模計算出在數組中的 index 下標。
    由於在計算中位運算比取模運算效率高的多,所以 HashMap 規定數組的長度爲 2^n 。這樣用 2^n - 1 做位運算與取模效果一致,並且效率還要高出許多。
    由於數組的長度有限,所以難免會出現不同的 Key 通過運算得到的 index 相同,這種情況可以利用鏈表來解決,HashMap 會在 table[index]處形成鏈表,採用頭插法將數據插入到鏈表中。

5、在JDK1.8中對HashMap進行了優化:當hash碰撞之後寫入鏈表的長度超過了閾值(默認爲8)並且table的長度不小於64(否則擴容一次)時,鏈表將會轉換爲紅黑樹

6、1.8 擴容條件:++size > threshold

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章