色婷婷狠狠18禁久久YY,CHINESE性内射高清国产,国产女人18毛片水真多1,国产AV在线观看

HashMap發生碰撞后怎么取碰撞的元素

方一強2年前30瀏覽0評論

HashMap發生碰撞后怎么取碰撞的元素?

首先你得知道什么是hash碰撞!

當有數據存入哈希表時,先使用hash算法(其實就是一種壓縮策略)計算數據的hash值,然后存入相應的數組中作為元素!因為是使用壓縮,所以毫無疑問的會產生沖突,兩個不同數據的hash值是一樣的(比如hash算法是取模,101%10和91%10是一樣的1作為hash值),這就是hash沖突,或者叫做hash碰撞!

解決hash碰撞主要有以下幾種方式:

1,開放地址法:在發生hash碰撞的時候,采用一定的策略(比如線性查找該元素后面的空位放入,或者隨機數探測方法等)將新的數據放入滿足策略的空位置!

2,再哈希法:使用多種hash算法,當產生沖突的時候,使用下一種算法,直到找到空位插入為止,如果hash碰撞比較嚴重,使用這種方法會大大增加hash計算時間!

3,鏈地址法:把每個數組的元素看做鏈表,變為數組+鏈表的數據形式,在發生沖突的時候,把新數據插入到對應元素的鏈表中!

舉個例子,比方說一個250000的數據,如果使用尋常的方式順序查找,需要125000次比較,而如果使用hash表(假設是十分均勻的hash表,數組是500個元素,鏈表是500個節點),則只需要500/2+500/2=500次比較,就可以查到!效率從O(N)降到了O(1)常量級別!

很多語言中都有hash的實現,而在JDK中使用的就是鏈地址法來解決哈希沖突的,不過在j d k8中,當鏈表節點數大于8的時候,會自動轉換成紅黑樹,進一步提升了查詢的效率!

hashmap是面試中常常提及的點,需要重點關注下,一直走在JAVA開發技術分享的道路上,從不停歇,敬請關注!!

java 實現紅黑樹,HashMap發生碰撞后怎么取碰撞的元素