java中哈希表怎么表示_java中HashMap概念是什么?怎么存取实现它?
時代總是在不斷的變化發展的,高新技術的應用也越來越普遍,大家對于新知識的渴望越來越強烈。java中很多的基礎知識都是非常重要的。一起來看看關于HashMap的知識吧。
一、 HashMap概述:
HashMap是基于哈希表的Map接口的非同步實現。此實現提供所有可選的映射操作,并允許使用null值和null鍵。此類不保證映射的順序,特別是它不保證該順序恒久不變。
二、HashMap的數據結構:
HashMap實際上是一個“數組+鏈表+紅黑樹”的數據結構
三、 HashMap的存取實現:
(1.8之前的)
當我們往HashMap中put元素的時候,先根據key的hashCode重新計算hash值,根據hash值得到這個元素在數組中的位置(即下標),如果數組該位置上已經存放有其他元素了,那么在這個位置上的元素將以鏈表的形式存放。
新加入的放在鏈頭,最先加入的放在鏈尾。如果數組該位置上沒有元素,就直接將該元素放到此數組中的該位置上。
1.8的:
put():
1. 根據key計算得到key.hash = (h = k.hashCode()) ^ (h >>> 16);
2. 根據key.hash計算得到桶數組的索引index = key.hash & (table.length -
1),這樣就找到該key的存放位置了:
① 如果該位置沒有數據,用該數據新生成一個節點保存新數據,返回null;
② 如果該位置有數據是一個紅黑樹,那么執行相應的插入/更新操作
③ 如果該位置有數據是一個鏈表,分兩種情況一是該鏈表沒有這個節點,另一個是該鏈表上有這個節點,注意這里判斷的依據是key.hash是否一樣:
如果該鏈表沒有這個節點,那么采用尾插法新增節點保存新數據,返回null; 如果該鏈表已經有這個節點了,那么找到該節點并更新新數據,返回老數據。
get():
計算需獲取數據的hash值(計算過程跟put一樣),計算存放在數組table中的位置(計算過程跟put一樣),然后依次在數組,紅黑樹,鏈表中查找(通過equals()判斷),最后再判斷獲取的數據是否為空,若為空返回null否則返回該數據
具體關于HashMap的知識還是非常詳細的,也不需要花費太多的時間去理解,多看看就好了。如果你想要知悉更多java常見問題,敬請關注奇Q工具網。
推薦閱讀:
總結
以上是生活随笔為你收集整理的java中哈希表怎么表示_java中HashMap概念是什么?怎么存取实现它?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 楚留香手游怎么搭配家具灵感写意配方 家具
- 下一篇: 红色警戒2共和国之辉联机图文教程