哈希(Hash)又稱散列,它是一個(gè)很常見(jiàn)的算法。在JavaHashMap數(shù)據(jù)結(jié)構(gòu)中主要就利用了哈希。哈希算法包括了哈希函數(shù)和哈希表兩部分。我們數(shù)組的特性可以知道,可以通過(guò)下標(biāo)快速(O(1))的定位元素,同理在哈希表中我們可以通過(guò)鍵(哈希值)快速的定位某個(gè)值,這個(gè)哈希值的計(jì)算就是通過(guò)哈希函數(shù)(hash(key) = address )計(jì)算得出的。通過(guò)哈希值即能定位元素[address] = value,原理同數(shù)組類似。

最好的哈希函數(shù)當(dāng)然是每個(gè)key值都能計(jì)算出唯一的哈希值,但往往可能存在不同的key值的哈希值,這就造成了沖突,評(píng)判一個(gè)哈希函數(shù)是否設(shè)計(jì)良好的兩個(gè)方面:

  1.沖突少。

  2.計(jì)算快。

  下面給出幾種常用的哈希函數(shù),它們的背后都有一定的數(shù)學(xué)原理且經(jīng)過(guò)大量實(shí)踐,其數(shù)學(xué)原理不在這里探究?! ?/p>

BKDR哈希函數(shù)(h = 31 * h + c

  這個(gè)哈希函數(shù)被應(yīng)用在Java的字符串哈希值計(jì)算。

 

延伸閱讀

學(xué)習(xí)是年輕人改變自己的最好方式-Java培訓(xùn),做最負(fù)責(zé)任的教育,學(xué)習(xí)改變命運(yùn),軟件學(xué)習(xí),再就業(yè),大學(xué)生如何就業(yè),幫大學(xué)生找到好工作,lphotoshop培訓(xùn),電腦培訓(xùn),電腦維修培訓(xùn),移動(dòng)軟件開(kāi)發(fā)培訓(xùn),網(wǎng)站設(shè)計(jì)培訓(xùn),網(wǎng)站建設(shè)培訓(xùn)學(xué)習(xí)是年輕人改變自己的最好方式