欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java中HashMap如何解決哈希沖突

 更新時間:2022年05月27日 09:18:46   作者:請叫我黃同學  
本文主要介紹了Java中HashMap如何解決哈希沖突,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

1. Hash算法和Hash表

了解Hash沖突首先了解Hash算法和Hash表

在這里插入圖片描述

  • Hash算法就是把任意長度的輸入通過散列算法變成固定長度的輸出,這個輸出結(jié)果就是一個散列值
  • Hash表又叫做“散列表”,它是通過key直接訪問到內(nèi)存存儲位置的數(shù)據(jù)結(jié)構(gòu),在具體的實現(xiàn)上,我們通過Hash函數(shù),把key映射到表中的某個位置,來獲取這個位置的數(shù)據(jù),從而加快數(shù)據(jù)的查找

2. Hash沖突

Hash沖突是由于哈希算法,被計算的數(shù)據(jù)是無限的,而計算后的結(jié)果的范圍是有限的,總會存在不同的數(shù)據(jù),經(jīng)過計算之后得到值是一樣,那么這個情況下就會出現(xiàn)所謂的哈希沖突

3. 解決Hash沖突的方法有四種

開放定址法也稱線性探測法,就是從發(fā)生沖突的那個位置開始,按照一定次序從Hash表找到一個空閑位置然后把發(fā)生沖突的元素存入到這個位置,而在java中,ThreadLocal就用到了線性探測法來解決Hash沖突

在這里插入圖片描述

如圖,在Hash表索引1的位置存了key=name,再向它添加key=hobby的時候,假設計算得到的索引也是1,那么這個時候發(fā)生哈希沖突,而開放開放定址法就是按照順序向前找到一個空閑的位置,來存儲這個沖突的key

鏈式尋址法,這是一種常見的方法,簡單理解就是把存在Hash沖突的key,以單向鏈表來進行存儲,比如HashMap

在這里插入圖片描述

如圖存在沖突的key直接以單向鏈表的方式去進行存儲

再Hash法,就是通過某個Hash函數(shù)計算的key,存在沖突的時候,再用另外一個Hash函數(shù)對這個可以進行Hash,一直運算,直到不再產(chǎn)生沖突為止,這種方式會增加計算的一個時間,性能上呢會有一些影響

建立公共移除區(qū),就是把Hash表分為基本表和益處表兩個部分,凡是存在沖突的元素,一律放到益處表中

4.HashMap在JDK1.8版本的優(yōu)化

HashMap在JDK1.8版本中是通過鏈式尋址法以及紅黑樹來解決Hash沖突的問題,其中紅黑樹是為了優(yōu)化Hash表的鏈表過長導致時間復雜度增加的問題,當鏈表長度大于等于8并且Hash表的容量大于64的時候,再向鏈表添加元素,就會觸發(fā)鏈表向紅黑樹的一個轉(zhuǎn)化

到此這篇關于Java中HashMap如何解決哈希沖突的文章就介紹到這了,更多相關Java HashMap哈希沖突內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 淺談使用java實現(xiàn)阿里云消息隊列簡單封裝

    淺談使用java實現(xiàn)阿里云消息隊列簡單封裝

    這篇文章主要介紹了淺談使用java實現(xiàn)阿里云消息隊列簡單封裝,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-03-03
  • java使用jna調(diào)用c#中dll的方法詳解

    java使用jna調(diào)用c#中dll的方法詳解

    前一段時間接了個項目,需要用到第三方提供的C#編寫的dll,本身項目是java語言,所以便有了下面這篇文章,本文給大家介紹了關于java中如何使用jna調(diào)用c#中dll的相關資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-09-09
  • Java中的@PostConstruct注解用法詳解

    Java中的@PostConstruct注解用法詳解

    @PostConstruct注解是Java中一個強大的特性,它允許開發(fā)人員在Bean被構(gòu)造并且依賴被注入后執(zhí)行初始化邏輯,本文將從源碼和用法的角度深入解析@PostConstruct注解,探討其實現(xiàn)細節(jié)和實際應用
    2023-07-07
  • springboot中bean的加載順序問題

    springboot中bean的加載順序問題

    這篇文章主要介紹了springboot中bean的加載順序問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-05-05
  • Java如何使用Jetty實現(xiàn)嵌入式的Servlet容器

    Java如何使用Jetty實現(xiàn)嵌入式的Servlet容器

    這篇文章主要介紹了Java使用Jetty實現(xiàn)嵌入式的Servlet容器,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,下面我們來一起了解一下吧
    2019-06-06
  • Java實現(xiàn)LeetCode(54.螺旋矩陣)

    Java實現(xiàn)LeetCode(54.螺旋矩陣)

    這篇文章主要介紹了Java實現(xiàn)LeetCode(螺旋矩陣),本文列出題目和寫題的思路。給出完整的解法代碼,需要的朋友可以參考下
    2021-06-06
  • MyBatis的動態(tài)SQL語句實現(xiàn)

    MyBatis的動態(tài)SQL語句實現(xiàn)

    這篇文章主要介紹了MyBatis的動態(tài)SQL語句實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-01-01
  • IDEA開啟Run Dashboard的幾種方式

    IDEA開啟Run Dashboard的幾種方式

    Run Dashboard 是 IntelliJ IDEA 中的一個工具窗口,用于管理和監(jiān)視項目中正在運行的應用程序和配置,它提供了一種集中管理運行和調(diào)試過程的方式,本文給大家介紹了IDEA開啟Run Dashboard的幾種方式,需要的朋友可以參考下
    2024-03-03
  • 解決微服務中關于用戶token處理到的坑

    解決微服務中關于用戶token處理到的坑

    這篇文章主要介紹了解決微服務中關于用戶token處理到的坑,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • Nacos1.4.0 Windows10單機模式啟動和集群啟動過程解析

    Nacos1.4.0 Windows10單機模式啟動和集群啟動過程解析

    這篇文章主要介紹了Nacos1.4.0 Windows10單機模式啟動和集群啟動,第一次使用nacos,廢話不多說,記錄下自己啟動Nacos遇到的坑,感興趣的朋友跟隨小編一起看看吧
    2023-10-10

最新評論