HashMap常見面試題

2021-09-24 17:13:22 字數 1334 閱讀 3366

1.「你知道hashmap的工作原理嗎?」 「你知道hashmap的get()方法的工作原理嗎?」

hashmap基於hashing原理,我們通過put()和get()方法儲存和獲取物件。當我們將鍵值對傳遞給put()方法時,它呼叫鍵物件的hashcode()方法來計算hashcode,讓後找到bucket位置來儲存entry物件。當獲取物件時,通過鍵物件的equals()方法找到正確的鍵值對,然後返回值物件。hashmap使用鍊錶來解決碰撞問題,當發生碰撞了,物件將會儲存在鍊錶的下乙個節點中。 hashmap在每個鍊錶節點中儲存鍵值對物件。

2.「你用過hashmap嗎?」 「什麼是hashmap?你為什麼用到它?」

hashmap實現了map介面,map介面對鍵值對進行對映。map中不允許重複的鍵。map介面有兩個基本的實現,hashmap和treemap。treemap儲存了物件的排列次序,而hashmap則不能。hashmap儲存的是鍵值對,允許鍵和值為null。hashmap是非synchronized的,但collection框架提供方法能保證hashmap synchronized,這樣多個執行緒同時訪問hashmap時,能保證只有乙個執行緒更改map

3.什麼是hashset?

hashset實現了set介面,它不允許集合中有重複的值,當我們提到hashset時,第一件事情就是在將物件儲存在hashset之前,要先確保物件重寫equals()和hashcode()方法,這樣才能比較物件的值是否相等,以確保set中沒有儲存相等的物件。如果我們沒有重寫這兩個方法,將會使用這個方法的預設實現。

public boolean add(object o)方法用來在set中新增元素,當元素值重複時則會立即返回false,如果成功新增的話會返回true。

4.hashset與hashmap的區別?

@侵刪。

5.hashmap 的資料結構?

雜湊表結構(鍊錶雜湊:陣列+鍊錶)實現,結合陣列和鍊錶的優點。

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

因為 hashcode 相同,不一定就是相等的(equals方法比較),所以兩個物件所在陣列的下標相同,「碰撞」就此發生。又因為 hashmap 使用鍊錶儲存物件,這個 node 會儲存到鍊錶中。

另外,hashmap 的鍵值對允許有null,但是concurrenthashmap 都不允許。

9.hashmap中hash函式怎麼是是實現的?還有哪些 hash 的實現方式?

1. 對key的hashcode做hash操作(高16bit不變,低16bit和高16bit做了乙個異或);

2. h & (length-1); //通過位操作得到下標index。

還有數字分析法、平方取中法、分段疊加法、 除留餘數法、 偽隨機數法。

HashMap常見面試題

物件 key和value是否允許為空 是否執行緒安全 hashmap key和value都允許為null 否hashtable key和value都不允許為null 是concurrenthashmap key和value都不允許為null 是jdk1.7 超過擴容的閾值 發生碰撞 jdk1.8 超...

HashMap常見面試題整理

花了三天時間來仔細閱讀hashmap的原始碼,期間補了下不少資料結構的知識,刷了不少相關的面試題並進行了整理 1.談一下hashmap的特性?1.hashmap儲存鍵值對實現快速訪問,允許為null。key值不可重複,若key值重複則覆蓋。2.非同步,執行緒不安全。3.底層是hash表,不保證有序 ...

常見面試題

1.get和post的區別 1 本質區別 get是向伺服器請求資料,post是向伺服器傳送資料。2 伺服器獲取值的方式 get方式提交的資料,伺服器端使用request.querystring獲取變數的值。post方式提交的資料,伺服器端使用request.form獲取資料。3 安全性 get安全效...