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

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

  1.沖突少。

  2.計算快。

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

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

  這個哈希函數(shù)被應用在Java的字符串哈希值計算。

 

延伸閱讀

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