java中哈希表怎么表示_java中HashMap概念是什么?怎么存取实现它?
時代總是在不斷的變化發(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)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 楚留香手游怎么搭配家具灵感写意配方 家具
- 下一篇: 红色警戒2共和国之辉联机图文教程