hashmap原理
hashmap是否初始化
1.hashmap預設bucket陣列多大: 16
2.new hashmap<19>的時候bucket陣列多大: 32 ,最接近19的2的冪次方
3.hashmap什麼時候開闢bucket陣列占用記憶體 :put的時候
4.hashmap時擴容 :put的元素達到容量成積負載因子預設是 16*0.75
jdk7 中的 hashmap 還是採用大家所熟悉的陣列+鍊錶的結構來儲存資料。
jdk8 中的 hashmap 採用了陣列+鍊錶或樹的結構來儲存資料。
hashmap 在 new 後並不會立即分配bucket陣列,而是第一次 put 時初始化,類似 arraylist 在第一次 add 時分配空間。win mergehashmap 的 bucket 陣列大小一定是2的冪,如果 new 的時候指定了容量且不是2的冪,實際容量會是最接近(大於)指定容量的2的冪,比如 new hashmap<>(19),比19大且最接近的2的冪是32,實際容量就是32。
hashmap 在 put 的元素數量大於 capacity * loadfactor(預設16 * 0.75) 之後會進行擴容。
jdk8在雜湊碰撞的鍊錶長度達到treeify_threshold(預設8)後,會把該鍊錶轉變成樹結構,提高了效能。
jdk8在 resize 的時候,通過巧妙的設計,減少了 rehash 的效能消耗
HashMap知識,ArrayList知識
hashtable 的擴容機制 void resize int newcapacity entry newtable new entry newcapacity transfer newtable table newtable threshold int newcapacity loadfactor...
HashMap知識總結
問題5 說說hashmap是如何進行擴容的可以嗎?問題6 那hashcode和equals在hashmap中是怎麼用的?jdk1.7的時候使用的是陣列 單鏈表的資料結構。但是在jdk1.8及之後時,使用的是陣列 鍊錶 紅黑樹的資料結構 當鍊表的深度達到8時,也就是預設閾值,會自動擴容,把鍊錶轉換成紅...
hashmap知識整理
hashmap底層資料結構是hash表 是由陣列加鍊表加紅黑樹實現的hash表,jdk1.8之前沒有紅黑樹。hashmap在put資料時需要先使用hash演算法結合陣列長度進行定址,找到陣列上的乙個槽位,如果槽位是空的就加入這個槽位中,如果槽位不是空的則加入該槽位上的鍊錶尾部 jdk 1.7 之前使...