JAVA8中的解決hash衝突的方案和具體實例

一、分離鏈表法(鏈地址法,拉鍊法)

- 原理:未衝突的情況下,直接將該值存放在數組中(數組中的沒一個位置,都是一個鏈表的頭,如圖一),一旦發生衝突(即原本存儲的位置已經有值了),立即將已有衝突處的鏈表,指向現有值。
- java中的應用:
  • 1.hashMap(hashMap和concurrentHashMap,當前結構爲鏈表並且是存值的時候在鏈表長度<8時,爲鏈表,一旦>8,立即將鏈表轉爲紅黑樹;當前結構是樹並且取值的時候,一旦長度<6就會成爲鏈表。結構的變換取決於當前的狀態和結構的長度)。
  • 2.hashTable
  • 3.hashSet

二、開放地址法

- 原理:開放地址法一般會有一個探測算法(以最簡單的線性探測爲例:即當前位置被佔用,則繼續向下走,直到下一個沒被佔用的位置,然後將值放在該位置中。)。噹噹前位置被佔用,則根據探測算法計算下一次的位置,直至計算出的位置未被佔用位置。
- java中的應用:
  • 1.ThreadLocalMap

三、再哈希法

- 原理:顧名思義,當發生衝突的時候,在使用一次hash算法,直至不衝突爲止。
- java中的應用:
  • 暫未瞭解到,繼續學習中...
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章