HashMap工作原理 和 HashTable

2022-03-14 06:25:45 字數 1206 閱讀 6964

你用過hashmap嗎

譬如hashmap可以接受null鍵值和值,而hashtable則不能;hashmap是非synchronized;hashmap很快;以及hashmap儲存的是鍵值對等等。

你知道hashmap的工作原理嗎

hashmap是基於hashing的原理,我們使用put(key, value)儲存物件到hashmap中,使用get(key)從hashmap中獲取物件。當我們給put()方法傳遞鍵和值時,我們先對鍵呼叫hashcode()方法,返回的hashcode用於找到bucket位置來儲存entry物件。」這裡關鍵點在於指出,hashmap是在bucket中儲存鍵物件和值物件,作為map.entry

當兩個物件的hashcode相同會發生什麼?

使用equals判斷兩個物件, 如果兩個返回true, 則是相同的物件,不儲存,否則,因為hashcode相同,所以它們的bucket位置相同,『碰撞』會發生。因為hashmap使用鍊錶儲存物件,這個entry(包含有鍵值對的map.entry物件)會儲存在鍊錶中。

如果兩個鍵的hashcode相同,你如何獲取值物件?

當我們呼叫get()方法,hashmap會使用鍵物件的hashcode找到bucket位置,找到bucket位置之後,會呼叫keys.equals()方法去找到鍊錶中正確的節點,最終找到要找的值物件。

如果hashmap的大小超過了負載因子(load factor)定義的容量,怎麼辦?

將會建立原來hashmap大小的兩倍的bucket陣列,來重新調整map的大小,並將原來的物件放入新的bucket陣列中。

你了解重新調整hashmap大小存在什麼問題嗎?

產生條件競爭 hashmap是執行緒不安全,在多執行緒情況下應該盡量避免使用hashmap

重寫了equals 和 hashcode 方法 這樣可以保持物件是不變的

我們可以使用自定義的物件作為鍵嗎?

可以 不過要重寫物件的equals 和 hashcode

我們可以使用cocurrenthashmap來代替hashtable嗎?

可以,不過hashtable提供供更強的執行緒安全性而concurrenthashmap同步效能更好,

HashMap工作原理

以前使用過很多次hashmap,但是對於其是如何實現的卻不是很了解,最近看了看hashmap的原始碼加上自己的理解寫了這篇文章方便以後回憶,寫得不好的地方請提醒。hashmap繼承了abstractmap類並且實現了map cloneable serializable三個介面。ps 並不是每乙個集合...

HashMap的工作原理和hashtable區別

1.hashmap的工作原理?hashmap底層是陣列 鍊錶 以陣列儲存元素,如有hash相同的元素,在陣列結構中,建立鍊錶結構,再把hash相同的元素放到鍊錶的下乙個節點 基於hashing 雜湊法 雜湊法 是一種將字元組成的字串轉換為固定長度的數值或索引值的方法 的原理。通過put get 方法...

HashMap的工作原理

hashmap的工作原理 hashmap基於hashing原理,我們通過put 和get 方法儲存和獲取物件。當我們將鍵值對傳遞給put 方法時,它呼叫鍵物件的hashcode 方法來計算hashcode值,然後找到bucket位置來儲存值物件。當獲取物件時,通過鍵物件的equals 方法找到正確的...