成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

hashmap源碼分析

codercao / 3313人閱讀

摘要:源碼解析的數(shù)據(jù)存儲(chǔ)結(jié)構(gòu)中的都是存在數(shù)組中的數(shù)據(jù)節(jié)點(diǎn)的數(shù)據(jù)結(jié)構(gòu)是一個(gè)單向的鏈表,,實(shí)現(xiàn)了的接口,即實(shí)現(xiàn)了,,等這些函數(shù),這些都是基本的讀取修改值的函數(shù)。的作用是判斷是否包含的作用是判斷是否包含值為的元素

HashMap源碼解析 hashmap的數(shù)結(jié)構(gòu)
(1)在Java中,數(shù)據(jù)結(jié)構(gòu)分為兩種,一種是數(shù)組,另一個(gè)是模型指針即引用,所有的數(shù)據(jù)結(jié)構(gòu)都可以用這兩種基本結(jié)構(gòu)所構(gòu)造,HashMap就是一個(gè)數(shù)組和鏈表的結(jié)合體,即通過(guò)hashcode找到數(shù)組中的某一個(gè)元素,然后通過(guò)key的equals方法在鏈表中找到key的位置對(duì)應(yīng)的value。

(2)當(dāng)創(chuàng)建一個(gè)hashmap的時(shí)候,就會(huì)初始化一個(gè)entry的數(shù)組,每一個(gè)entry的數(shù)組元素會(huì)持有一個(gè)指向下一個(gè)元素的引用,這就構(gòu)成了鏈表。當(dāng)我們往hashmap中put元素的是時(shí)候,先跟住key的hash值得到這個(gè)元素在數(shù)組中的位置(即下標(biāo))然后可以把這個(gè)元素放在對(duì)應(yīng)的位置之中了,如果這個(gè)位置繼續(xù)放其他的元素,那么在同一個(gè)位子上的元素將以鏈表的形式存放,新加入的放在鏈頭,最先加入的就會(huì)放在鏈未,從hashmap之中g(shù)et元素的時(shí)候,首先計(jì)算hashmap的key值得hashcode,找到數(shù)組中對(duì)應(yīng)位置的某一個(gè)元素,然后通過(guò)key的equals方法在對(duì)應(yīng)的位置的鏈表中找到需要的元素,其實(shí)也就是說(shuō),如果每一個(gè)鏈表的位置只有一個(gè)元素,那么hashmap的get的效率是最高的。
hash算法

(1)首先先算的key的hashcode的值,然后和數(shù)組長(zhǎng)度-1做一次&,這樣就可以保證得到與數(shù)組index相同的幾率較小,那么數(shù)據(jù)在數(shù)組上分布的就比較均勻,也就是碰撞率較小,響應(yīng)的提高了查詢的效率。

hashmap的擴(kuò)容
(1)當(dāng)hashmap中的元素越來(lái)越多的時(shí)候,碰撞的幾率就會(huì)直線上升,為了提高查詢的效率,就要對(duì)hashmap的數(shù)組進(jìn)行擴(kuò)容,而在hashmap數(shù)組擴(kuò)容時(shí)候,原數(shù)組中的數(shù)據(jù)必須重新計(jì)算其在新數(shù)組中的位置,并放進(jìn)去,這個(gè)過(guò)程叫resize,而這個(gè)過(guò)程十分耗時(shí),所以說(shuō),盡量在聲明的時(shí)候,就定義它的大小。
hashmap 源碼解析

(1)hashmap的數(shù)據(jù)存儲(chǔ)結(jié)構(gòu)

transient Entry[] table
hashmap中的key-value都是存在entry數(shù)組中的

(2)數(shù)據(jù)節(jié)點(diǎn)entry的數(shù)據(jù)結(jié)構(gòu)

entry是一個(gè)單向的鏈表,entr,實(shí)現(xiàn)了map.entry 的接口,即實(shí)現(xiàn)了getkey(),getvalue(),setvalue()
,equals(),hashcode()等這些函數(shù),這些都是基本的讀取/修改key、value 值的函數(shù)。

(3)hashmap的構(gòu)造函數(shù)

  (1. 默認(rèn)構(gòu)造函數(shù)  hashmap();

  (2. 指定容量大小和加載因子的構(gòu)造函數(shù) hashmap(int initalcapaciry,float loadFactor)

   (3. 指定容量大小的構(gòu)造函數(shù) hashmap(int initialcapacity)

   (4. 包含map的構(gòu)造函數(shù) hashmap(map m)

(4) clear()

   clear()的作用是清空hashmap,它是通過(guò)將所有的元素設(shè)置為null來(lái)實(shí)現(xiàn)的。

(5)containsKey()

  containsKey()的作用是判斷hashmap是否包含key

(6)containsValue()

  containsValue()的作用是判斷hashmap是否包含值為value的元素

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/71220.html

相關(guān)文章

  • HashMap源碼分析(一):JDK源碼分析系列

    摘要:當(dāng)一個(gè)值中要存儲(chǔ)到的時(shí)候會(huì)根據(jù)的值來(lái)計(jì)算出他的,通過(guò)哈希來(lái)確認(rèn)到數(shù)組的位置,如果發(fā)生哈希碰撞就以鏈表的形式存儲(chǔ)在源碼分析中解釋過(guò),但是這樣如果鏈表過(guò)長(zhǎng)來(lái)的話,會(huì)把這個(gè)鏈表轉(zhuǎn)換成紅黑樹來(lái)存儲(chǔ)。 正文開始 注:JDK版本為1.8 HashMap1.8和1.8之前的源碼差別很大 目錄 簡(jiǎn)介 數(shù)據(jù)結(jié)構(gòu) 類結(jié)構(gòu) 屬性 構(gòu)造方法 增加 刪除 修改 總結(jié) 1.HashMap簡(jiǎn)介 H...

    wdzgege 評(píng)論0 收藏0
  • HashSet源碼分析:JDK源碼系列

    摘要:簡(jiǎn)介繼續(xù)分析源碼,上一篇文章把的分析完畢。本文開始分析簡(jiǎn)單的介紹一下。存儲(chǔ)的元素是無(wú)序的并且允許使用空的元素。 1.簡(jiǎn)介 繼續(xù)分析源碼,上一篇文章把HashMap的分析完畢。本文開始分析HashSet簡(jiǎn)單的介紹一下。 HashSet是一個(gè)無(wú)重復(fù)元素集合,內(nèi)部使用HashMap實(shí)現(xiàn),所以HashMap的特征耶繼承了下來(lái)。存儲(chǔ)的元素是無(wú)序的并且HashSet允許使用空的元素。 HashSe...

    用戶83 評(píng)論0 收藏0
  • HashMap 源碼詳細(xì)分析(JDK1.8)

    摘要:則使用了拉鏈?zhǔn)降纳⒘兴惴?,并在中引入了紅黑樹優(yōu)化過(guò)長(zhǎng)的鏈表。如果大家對(duì)紅黑樹感興趣,可以閱讀我的另一篇文章紅黑樹詳細(xì)分析。構(gòu)造方法構(gòu)造方法分析的構(gòu)造方法不多,只有四個(gè)。 1.概述 本篇文章我們來(lái)聊聊大家日常開發(fā)中常用的一個(gè)集合類 - HashMap。HashMap 最早出現(xiàn)在 JDK 1.2中,底層基于散列算法實(shí)現(xiàn)。HashMap 允許 null 鍵和 null 值,在計(jì)算哈鍵的哈希值...

    monw3c 評(píng)論0 收藏0
  • java源碼

    摘要:集合源碼解析回歸基礎(chǔ),集合源碼解析系列,持續(xù)更新和源碼分析與是兩個(gè)常用的操作字符串的類。這里我們從源碼看下不同狀態(tài)都是怎么處理的。 Java 集合深入理解:ArrayList 回歸基礎(chǔ),Java 集合深入理解系列,持續(xù)更新~ JVM 源碼分析之 System.currentTimeMillis 及 nanoTime 原理詳解 JVM 源碼分析之 System.currentTimeMi...

    Freeman 評(píng)論0 收藏0
  • HashMap源碼分析

    摘要:線程安全關(guān)于線程安全,我們想要知道的是在什么情況下會(huì)發(fā)生線程不安全的情況實(shí)際上,在上文分析方法時(shí),當(dāng)?shù)娜萘砍^(guò)了時(shí),便執(zhí)行操作,就存在線程不安全的問(wèn)題。實(shí)現(xiàn)了所謂的線程安全,在很多方法上都加上了。 HashMap簡(jiǎn)介 本文針對(duì)HashMap的源碼分析基于JDK 7,JDK 8在HashMap的實(shí)現(xiàn)上有著較大幅度的改進(jìn)和優(yōu)化,這部分優(yōu)化我將另起一篇來(lái)闡述。另外,本文僅分析HashMap眾...

    zhkai 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<