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...