真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Java8的HashMap怎么用-創(chuàng)新互聯(lián)

這篇文章給大家分享的是有關(guān)Java8的HashMap怎么用的內(nèi)容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。

創(chuàng)新互聯(lián)建站專業(yè)為企業(yè)提供通海網(wǎng)站建設、通海做網(wǎng)站、通海網(wǎng)站設計、通海網(wǎng)站制作等企業(yè)網(wǎng)站建設、網(wǎng)頁設計與制作、通海企業(yè)網(wǎng)站模板建站服務,十載通海做網(wǎng)站經(jīng)驗,不只是建網(wǎng)站,更提供有價值的思路和整體網(wǎng)絡服務。

Java8HashMap

Java8對HashMap進行了一些修改,較大的不同就是利用了紅黑樹,所以其由數(shù)組+鏈表+紅黑樹組成。

根據(jù)Java7HashMap的介紹,我們知道,查找的時候,根據(jù)hash值我們能夠快速定位到數(shù)組的具體下標,但是之后的話,需要順著鏈表一個個比較下去才能找到我們需要的,時間復雜度取決于鏈表的長度,為O(n)。

為了降低這部分的開銷,在Java8中,當鏈表中的元素超過了8個以后,會將鏈表轉(zhuǎn)換為紅黑樹,在這些位置進行查找的時候可以降低時間復雜度為O(logN)。

下面,我們還是用代碼來介紹吧,個人感覺,Java8的源碼可讀性要差一些,不過精簡一些。

Java7中使用Entry來代表每個HashMap中的數(shù)據(jù)節(jié)點,Java8中使用Node,基本沒有區(qū)別,都是key,value,hash和next這四個屬性,不過,Node只能用于鏈表的情況,紅黑樹的情況需要使用TreeNode。

我們根據(jù)數(shù)組元素中,第一個節(jié)點數(shù)據(jù)類型是Node還是TreeNode來判斷該位置下是鏈表還是紅黑樹的。

和Java7稍微有點不一樣的地方就是,Java7是先擴容后插入新值的,Java8先插值再擴容,不過這個不重要。

數(shù)組擴容

resize()方法用于初始化數(shù)組或數(shù)組擴容,每次擴容后,容量為原來的2倍,并進行數(shù)據(jù)遷移。

get過程分析

相對于put來說,get真的太簡單了。

計算key的hash值,根據(jù)hash值找到對應數(shù)組下標:hash&(length-1)

判斷數(shù)組該位置處的元素是否剛好就是我們要找的,如果不是,走第三步

判斷該元素類型是否是TreeNode,如果是,用紅黑樹的方法取數(shù)據(jù),如果不是,走第四步

遍歷鏈表,直到找到相等(==或equals)的key

感謝各位的閱讀!關(guān)于“Java8的HashMap怎么用”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!


分享標題:Java8的HashMap怎么用-創(chuàng)新互聯(lián)
文章網(wǎng)址:http://weahome.cn/article/dshsdh.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部