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

java教程散列表和樹所對(duì)應(yīng)容器類及HashMap解決沖突學(xué)習(xí)

 更新時(shí)間:2021年10月08日 10:48:03   作者:chuangjizai7518  
本篇篇文章是java教程,主要介紹了java教程散列表,樹所對(duì)應(yīng)容器類及HashMap解決沖突的學(xué)習(xí),有需要的朋友可以借鑒參考下,希望能夠有所幫助

java中散列表、樹所對(duì)應(yīng)的的容器類

散列表:hashmap,hashtable,concurrentHashmap

樹:hashset,treemap,treeset

jdk7與jdk8中HashMap的區(qū)別

jdk7中hashMap采用數(shù)組+鏈表,如果過多的節(jié)點(diǎn)在hash時(shí)發(fā)生碰撞,如果要查找其中一個(gè)節(jié)點(diǎn),需要O(n)的查找時(shí)間。

jdk7中hashMap采用數(shù)組+鏈表/紅黑樹,當(dāng)某個(gè)桶位達(dá)到某個(gè)閾值時(shí),鏈表將轉(zhuǎn)化為紅黑樹,紅黑樹時(shí)間復(fù)雜度O(nlogn)

HashMap如何解決沖突

1.開放定址法: 通過探測(cè)算法,當(dāng)一個(gè)槽位已經(jīng)被占用情況下繼續(xù)查找下一個(gè)
2.鏈地址法(數(shù)組+鏈表)
3.再哈希 準(zhǔn)備多個(gè)散列函數(shù),當(dāng)發(fā)生沖突時(shí),再選擇一個(gè)散列函數(shù)進(jìn)行散列。

HashMap的工作原理

HashMap 底層是數(shù)組和單向鏈表實(shí)現(xiàn),數(shù)組中的每個(gè)元素都是鏈表,由 Node 內(nèi)部類(實(shí)現(xiàn) Map.Entry<K,V>接口)實(shí)現(xiàn),HashMap 通過 put & get 方法存儲(chǔ)和獲取。

HashCode是定位(存儲(chǔ)位置),equals是定性(兩者是否相等)

1.存儲(chǔ)對(duì)象時(shí),將K/V傳給put()方法:

2.hash(K)計(jì)算K的hash,結(jié)合數(shù)組長(zhǎng)度,計(jì)算數(shù)組下標(biāo)

調(diào)整數(shù)據(jù)大?。ó?dāng)容器中的元素個(gè)數(shù)大于 capacity * loadfactor 時(shí),容器會(huì)進(jìn)行擴(kuò)容resize 為 2n)

3.三種情況:

  • 當(dāng)K的hash值不在HashMap中,則執(zhí)行插入
  • 當(dāng)K的hash值存在HashMap中,發(fā)生碰撞
       它們兩者equals為true,更新鍵值對(duì)
       它們兩者equals為false,插入鏈表尾部或紅黑樹(當(dāng)鏈表長(zhǎng)度超過8)中

獲取對(duì)象時(shí)(get方法):

  • 調(diào)用hash(K),計(jì)算K的hash值從而獲取數(shù)組的下標(biāo)
  • 順序遍歷鏈表,equal方法查找相同 Node 鏈表中 K 值對(duì)應(yīng)的 V 值

轉(zhuǎn)載于:https://my.oschina.net/u/3973793/blog/3100006

以上就是java教程散列表和樹所對(duì)應(yīng)容器類及HashMap解決沖突學(xué)習(xí)的詳細(xì)內(nèi)容,更多關(guān)于java散列表樹所對(duì)應(yīng)容器類及HashMap解決沖突的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 基于IDEA,Eclipse搭建Spring Boot項(xiàng)目過程圖解

    基于IDEA,Eclipse搭建Spring Boot項(xiàng)目過程圖解

    這篇文章主要介紹了基于IDEA,Eclipse搭建Spring Boot項(xiàng)目過程圖解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-04-04
  • Java開發(fā)環(huán)境配置方法

    Java開發(fā)環(huán)境配置方法

    這篇文章主要介紹了并不是每一臺(tái)計(jì)算機(jī)都可以運(yùn)行Java程序,要運(yùn)行Java程序,計(jì)算機(jī)必須學(xué)習(xí)搭建Java開發(fā)環(huán)境,需要的朋友可以參考下
    2015-07-07
  • SpringBoot配置文件格式詳細(xì)介紹

    SpringBoot配置文件格式詳細(xì)介紹

    這篇文章主要為大家詳細(xì)介紹了SpringBoot配置文件格式,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)SpringBoot有一定幫助,需要的可以參考一下
    2022-09-09
  • 深入理解Java中的EnumMap和EnumSet

    深入理解Java中的EnumMap和EnumSet

    這篇文章主要介紹了深入理解Java中的EnumMap和EnumSet,一般來說我們會(huì)選擇使用HashMap來存儲(chǔ)key-value格式的數(shù)據(jù),考慮這樣的特殊情況,一個(gè)HashMap的key都來自于一個(gè)Enum類,這樣的情況則可以考慮使用本文要講的EnumMap,需要的朋友可以參考下
    2023-11-11
  • 基于Java設(shè)計(jì)一個(gè)短鏈接生成系統(tǒng)

    基于Java設(shè)計(jì)一個(gè)短鏈接生成系統(tǒng)

    相信大家在生活中會(huì)收到很多短信,而這些短信都有一個(gè)特點(diǎn)是鏈接很短。這些鏈接背后的原理是什么呢?怎么實(shí)現(xiàn)的?小編今天就帶你們?cè)敿?xì)了解一下
    2021-12-12
  • 基于SSM框架實(shí)現(xiàn)簡(jiǎn)單的登錄注冊(cè)的示例代碼

    基于SSM框架實(shí)現(xiàn)簡(jiǎn)單的登錄注冊(cè)的示例代碼

    這篇文章主要介紹了基于SSM框架實(shí)現(xiàn)簡(jiǎn)單的登錄注冊(cè)的示例代碼,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-12-12
  • java中TCP實(shí)現(xiàn)回顯服務(wù)器及客戶端

    java中TCP實(shí)現(xiàn)回顯服務(wù)器及客戶端

    本文主要介紹了java中TCP實(shí)現(xiàn)回顯服務(wù)器及客戶端,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-02-02
  • 基于java中兩個(gè)對(duì)象屬性的比較

    基于java中兩個(gè)對(duì)象屬性的比較

    下面小編就為大家?guī)硪黄趈ava中兩個(gè)對(duì)象屬性的比較。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-09-09
  • Java使用modbus4j實(shí)現(xiàn)modbus?tcp通訊

    Java使用modbus4j實(shí)現(xiàn)modbus?tcp通訊

    Modbus是由Modicon(現(xiàn)為施耐德電氣公司的一個(gè)品牌)在1979年發(fā)明的,是全球第一個(gè)真正用于工業(yè)現(xiàn)場(chǎng)的總線協(xié)議,本文主要介紹了java如何使用modbus4j實(shí)現(xiàn)modbus?tcp通訊,感興趣的可以了解下
    2023-12-12
  • 如何使用IDEA從SVN服務(wù)端檢出項(xiàng)目

    如何使用IDEA從SVN服務(wù)端檢出項(xiàng)目

    這篇文章主要介紹了如何使用IDEA從SVN服務(wù)端檢出項(xiàng)目問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-12-12

最新評(píng)論