一、分離鏈表法(鏈地址法,拉鏈法)
- 原理:未沖突的情況下,直接將該值存放在數組中(數組中的沒一個位置,都是一個鏈表的頭,如圖一),一旦發生沖突(即原本存儲的位置已經有值了),立即將已有沖突處的鏈表,指向現有值。
圖一.png
- java中的應用:
- 1.hashMap(hashMap和concurrentHashMap,當前結構為鏈表并且是存值的時候在鏈表長度<8時,為鏈表,一旦>8,立即將鏈表轉為紅黑樹;當前結構是樹并且取值的時候,一旦長度<6就會成為鏈表。結構的變換取決于當前的狀態和結構的長度)。
- 2.hashTable
- 3.hashSet
二、開放地址法
- 原理:開放地址法一般會有一個探測算法(以最簡單的線性探測為例:即當前位置被占用,則繼續向下走,直到下一個沒被占用的位置,然后將值放在該位置中。)。當當前位置被占用,則根據探測算法計算下一次的位置,直至計算出的位置未被占用位置。
- java中的應用:
- 1.ThreadLocalMap
三、再哈希法
- 原理:顧名思義,當發生沖突的時候,在使用一次hash算法,直至不沖突為止。
- java中的應用:
- 暫未了解到,繼續學習中...