對HashMap擴容的耗時的測試以及自己的理解

2021-07-29 03:21:40 字數 827 閱讀 5096

mapmap = new hashmap(1024);

for (int i = 0; i < 768; i++)

long t1 = system.nanotime();

map.put("1", "1");

long t2 = system.nanotime();

map.put("2", "2");

long t3 = system.nanotime();

system.out.println("發生擴容耗時: "+(t2-t1));//發生擴容耗時: 198666

system.out.println("未發生擴容耗時:"+(t3-t2));//未發生擴容耗時:5333

1、初始化hashmap最大容量,預設載入因子0.75,

擴容門限值1024*0.75=768

2、當put的元素超過1024*0.75=768(臨界值threshold)時,發生擴容,threshold也擴大原來的一倍,陣列發生擴容 陣列長度擴大原來的一倍,

並重新計算新陣列的位置. 

3、載入因子:為了平衡兩個問題,1、減少hash衝突;2、提高空間利用率

HashMap的擴容問題

hashmap的重要特性是它的容量 capacity 負載因子 load factor 和擴容極限 threshold resizing 當hashmap中的元素個數 陣列大小 乘以 load factor 負載因子預設為0.75 時,陣列就會擴容。hashmap擴容是非常消耗效能的操作,預設元素的...

總結 HashMap的擴容機制

jdk1.7 hashmap擴容原理 原理 建立乙個容量的新陣列,重新計算每個元素在陣列中的位置並且進行遷移。缺點 1 擴容後每個元素需要重新計算hash。2 鍊錶中元素順序 每次遷移後被倒置。jdk1.8 hashmap擴容策略 想法 hashmap是先插入然後再擴容,有的時候我們可能會想如果先增...

HashMap的擴容機制 resize

hashmap底層邏輯 當我們往hashmap中put元素的時候,先根據key的hash值得到這個元素在陣列中的位置 即下標 然後就可以把這個元素放到對應的位置中了。如果這個元素所在的位子上已經存放有其他元素了,那麼在同乙個位子上的元素將以鍊錶的形式存放,新加入的放在鏈頭,最先加入的放在鏈尾。從ha...