架構師之面試 jdk的hashMap實現

2021-09-02 11:33:08 字數 997 閱讀 8310

1.前言。

如題。2.詳述。

(1)hashmap演算法就是陣列鍊錶。陣列存放的元素是鍵值對。jdk通過移位演算法(其實也就是簡單的加乘演算法),如下**來生成陣列下標(生成後indexfor一下就成下標了)。

static int hash(int h)

(2)hashmap的鍵值對存放的位置和key的值無必然聯絡,是通過簡單的與操作來獲得陣列下標的。

如:

static int indexfor(int h, int length)

(3)hashmap的負載因子預設是0.75,[b]增大和減少無任何意義[/b],jdk對於這個東西的介紹已經很過時了。超過0.75就變為兩倍的容量,[b]自動擴容無任何意義[/b],因為儲存的資料大小是受磁碟和記憶體限制的。通常是程式自動限制個上限就可以了。

3.一句話概括jdk的hashmap實現

就是乙個陣列加鍊表,陣列裡面存放鍵值對的鍊錶(鍊錶裡面放entry),一般鍊錶只有乙個key的元素。如果有key一樣的情況,那麼put會將其新增到鍊錶裡面,此時鍊錶有多個值。

如:

public v put(k key, v value) }

// 如果 i 索引處的 entry 為 null,表明此處還沒有 entry

modcount++;

// 將 key、value 新增到 i 索引處

addentry(hash, key, value, i);

return null;

}

4.注意事項。

hashmap不能避免hash衝突,只是簡單校驗,所以經常要重寫物件的equals方法。 hashmap可能會淘汰,應該有唯一性演算法替代hash演算法(如hadoop自定義的序列,我自己也可以開發對應的序列,大資料情況下雜湊不再重要),演算法效率當今已經不是個問題。

怎麼面試架構師

其實本文想說的是 當面試乙個架構師的時候,我們應該問什麼問題?我覺得,問什麼樣的問題,體現了team leader更加看重架構師的哪些特點。我一直認為,做技術就跟練武一樣,在練武的不同階段,分招式和心法。技術也一樣,在不同的階段,也分招式和心法。另外,就我個人而言,經常忘記招式,一方面可以說十二年來...

怎麼面試架構師

其實本文想說的是 當面試乙個架構師的時候,我們應該問什麼問題?我覺得,問什麼樣的問題,體現了team leader更加看重架構師的哪些特點。我一直認為,做技術就跟練武一樣,在練武的不同階段,分招式和心法。技術也一樣,在不同的階段,也分招式和心法。另外,就我個人而言,經常忘記招式,一方面可以說十二年來...

新加坡架構師面試總結

本來是想把之前面試的一些經歷和體會以乙個系列的形式寫出來,但一直都有這樣或者那樣的事情 從中作梗 所以直到現在也未能如願。鑑於很多朋友發郵件提到這個問題,我本意是很想把這些文章補上,但是這個月忙著趕專案,下個月又要和老婆去澳大利亞旅遊大半個月,所以先發一張之前概述的總結圖,希望對需要這些資料的朋友一...