new HashMap(10000,0.75f) 是說hash值不碰撞的情況下吧
這個例子產生的HashMap的長度是12288, 如果在hash值沒有規定是否會碰撞 的條件下, 輸入12288條數據, 也不一定會發生擴容吧, 有可能極端的情況會有很多hash值碰撞, 導致數組上的空位還能大于四分之一的容量, 這樣也不會擴容吧, 老師講的例子, 前提是hash值不碰撞的情況, 對吧.
這個例子產生的HashMap的長度是12288, 如果在hash值沒有規定是否會碰撞 的條件下, 輸入12288條數據, 也不一定會發生擴容吧, 有可能極端的情況會有很多hash值碰撞, 導致數組上的空位還能大于四分之一的容量, 這樣也不會擴容吧, 老師講的例子, 前提是hash值不碰撞的情況, 對吧.
2020-06-24
舉報
2022-05-06
我覺得你理解的沒問題啊,為什么這么多反駁的??
2021-01-31
你的理解有偏差, 跟是否產生hash碰撞沒關系!!?
new HashMap(10000, 0.75f)這里的10000指的是map里存的key的數量, map里有個成員變量size來記錄的, 不是代表數組大小!?
可以看HashMap的put方法的源碼, 如果key已存在, 會替換對應的value, 否則size就會自增1.?
當size>容量*0.75時, 會進行擴容.
可以做個試驗論證下:
設置容量為8, 每次put的都是8的倍數, 所以每次put都會產生hash碰撞, 但是仍然在put6次(8*0.75)之后進行了擴容!
HashMap的put源碼:
2020-07-26
不是的,看源碼,是錄入的條數不是用的多少個長度
2020-07-06
其實說的是長度,不是錄入的數據有多少條,所以不要被老師帶偏了