資料結構 HashMap 面試題8問

2022-10-01 02:03:10 字數 994 閱讀 6806

面試題8問:

1. 如果new hashmap(19),bucket陣列有多大?

答:hashmap陣列大小初始為2的四次方,16,且每一次都是以2倍增長,陣列大小總是2的次方倍;

所以給19大小的空間,需要的陣列長度為最接近19的2的次方倍,也就是2的五次方32;

2. hashmap什麼時候開闢bucket陣列占用記憶體?

答:第一次放資料put時候,且初始化空間大小是16;

3. hashmap何時擴容?

答:超過負載因子(0.75)時候,(負載因子:填入表中的元素個數/雜湊表的長度),且擴容是2倍擴容的;

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

5. 如果兩個鍵的hashcode相同,要如何取值物件?

答:通過equals方法來取值物件,遍歷與hashcode值相等時相連的鍊錶,直到相同或者沒有找到(null)

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

答:重新調整過hashmap大小後,原來存在的元素,需要重新雜湊到新的鍊錶當中。

7. hashmap中的hash函式作用?

答:為了混合雜湊值的高位和低位,增加低位的隨機性,並且混合後的值也變相保持了高位的特徵

(具體:右位移16位,正好是32bit的一半,自己的高半區和低半區做異或,就是為了混合原始雜湊碼的高位和低位,以此來加大低位的隨機性。而且混合後的低位摻雜了高位的部分特徵,這樣高位的資訊也被變相保留下來)

8. hashmap中存放資料確定資料存放下標的取模運算原始碼中為何這樣實現?

原始碼中模運算是在這個indexfor( )函式裡完成的。

答:這樣做的原因是

因為hashmap的陣列長度是2的整數冪,陣列長度-1 正好是乙個奇數,奇數的二進位制位的低位(最左邊位)一定是1,可以 與運算& 後就可以在低位產生 0或者1,要是直接是陣列長度的話,因為是偶數,二進位制的低位一定是0,這樣 與運算& 後就只在低位產生0。所以這樣做之後產生的下標index的可能性就更多,從而也在避免雜湊衝突的發生 !

資料結構 面試題

python實現 寫個大概,import re def quick sort alist,first,last if first last return mid value alist first low first high last while low high while low mid va...

資料結構 面試題

2.棧2.2使用棧計算字尾表示式 2.3對棧的元素進行排序 2.4判斷表示式是否括號平衡 3.佇列 4.鍊錶 5.樹6.圖 7.字典樹 這是一種高效的樹形結構,但值得單獨說明 8.雜湊表 雜湊表 1.1 尋找陣列中第二小的元素 思路 公升序排序之後,輸出第二個數字 1.2 找到陣列中第乙個不重複出現...

mysql資料結構面試題 MySQL 面試題

mysql 的一些面試題,有的是平時聊到的,有的是聽別人說的,有的是工作中遇到的,特此彙總一下,有問有答。一條 sql 查詢語句執行流程?1 聯結器。客戶端和伺服器 tcp 握手後,驗證使用者名稱密碼。使用者名稱密碼通過後,聯結器會到許可權表中查詢你擁有的許可權。之後這個連線裡面的許可權判斷邏輯,都...