日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java中哈希表怎么表示_java中HashMap概念是什么?怎么存取实现它?

發(fā)布時間:2023/12/15 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java中哈希表怎么表示_java中HashMap概念是什么?怎么存取实现它? 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

時代總是在不斷的變化發(fā)展的,高新技術(shù)的應(yīng)用也越來越普遍,大家對于新知識的渴望越來越強烈。java中很多的基礎(chǔ)知識都是非常重要的。一起來看看關(guān)于HashMap的知識吧。

一、 HashMap概述:

HashMap是基于哈希表的Map接口的非同步實現(xiàn)。此實現(xiàn)提供所有可選的映射操作,并允許使用null值和null鍵。此類不保證映射的順序,特別是它不保證該順序恒久不變。

二、HashMap的數(shù)據(jù)結(jié)構(gòu):

HashMap實際上是一個“數(shù)組+鏈表+紅黑樹”的數(shù)據(jù)結(jié)構(gòu)

三、 HashMap的存取實現(xiàn):

(1.8之前的)

當(dāng)我們往HashMap中put元素的時候,先根據(jù)key的hashCode重新計算hash值,根據(jù)hash值得到這個元素在數(shù)組中的位置(即下標(biāo)),如果數(shù)組該位置上已經(jīng)存放有其他元素了,那么在這個位置上的元素將以鏈表的形式存放。

新加入的放在鏈頭,最先加入的放在鏈尾。如果數(shù)組該位置上沒有元素,就直接將該元素放到此數(shù)組中的該位置上。

1.8的:

put():

1. 根據(jù)key計算得到key.hash = (h = k.hashCode()) ^ (h >>> 16);

2. 根據(jù)key.hash計算得到桶數(shù)組的索引index = key.hash & (table.length -

1),這樣就找到該key的存放位置了:

① 如果該位置沒有數(shù)據(jù),用該數(shù)據(jù)新生成一個節(jié)點保存新數(shù)據(jù),返回null;

② 如果該位置有數(shù)據(jù)是一個紅黑樹,那么執(zhí)行相應(yīng)的插入/更新操作

③ 如果該位置有數(shù)據(jù)是一個鏈表,分兩種情況一是該鏈表沒有這個節(jié)點,另一個是該鏈表上有這個節(jié)點,注意這里判斷的依據(jù)是key.hash是否一樣:

如果該鏈表沒有這個節(jié)點,那么采用尾插法新增節(jié)點保存新數(shù)據(jù),返回null; 如果該鏈表已經(jīng)有這個節(jié)點了,那么找到該節(jié)點并更新新數(shù)據(jù),返回老數(shù)據(jù)。

get():

計算需獲取數(shù)據(jù)的hash值(計算過程跟put一樣),計算存放在數(shù)組table中的位置(計算過程跟put一樣),然后依次在數(shù)組,紅黑樹,鏈表中查找(通過equals()判斷),最后再判斷獲取的數(shù)據(jù)是否為空,若為空返回null否則返回該數(shù)據(jù)

具體關(guān)于HashMap的知識還是非常詳細的,也不需要花費太多的時間去理解,多看看就好了。如果你想要知悉更多java常見問題,敬請關(guān)注奇Q工具網(wǎng)。

推薦閱讀:

總結(jié)

以上是生活随笔為你收集整理的java中哈希表怎么表示_java中HashMap概念是什么?怎么存取实现它?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。