HashMap的工作原理
- HashMap底層由數組實現,是基于hashing原理,我們通過put()和get()方法存儲和獲取對象。
- 在存儲時,首先我們通過key的hashCode()方法拿到key的哈希值,然后我們通過哈希算法,用拿到的哈希值計算出這個key、value節(jié)點的引用在數組中存放的位置,完成存儲。
- 在獲取時,我們同樣根據key的哈希值,通過同樣的哈希算法,獲取到該節(jié)點在數組中的位置。
如果兩個不同的key計算得到的hashcode相同會怎樣
- 首先,我們的key、value是以一個節(jié)點對象存儲的,數組當中存放的是該節(jié)點的引用。
- 其次,該節(jié)點實現了鏈表結構。
- 在存儲時如果數組中對應位置已經存在有效節(jié)點,我們會將新的節(jié)點的引用放到這個位置,然后這個新的節(jié)點的next成員變量指向之前這個位置的舊節(jié)點的引用。
- 在獲取的時候,我們首先在數組中找到這個位置,然后遍歷,根據鍵對象的equals()方法確定出具體的值。
HashMap與HashTable的異同
- HashMap不是線程安全的
- HashMap可以允許key或者value為null。