欧美亚洲自拍偷拍_日本一区视频在线观看_国产二区在线播放_亚洲男人第一天堂

二維碼
企資網

掃一掃關注

當前位置: 首頁 » 企資快報 » 服務 » 正文

HashMap的設計與優化

放大字體  縮小字體 發布日期:2021-08-19 02:00:58    作者:媒體小英    瀏覽次數:48
導讀

前言手執煙花以謀生 心懷詩意以謀愛不論我是否去記錄,在往昔與未來的無限歲月中,仍會有人奮起,有人沉淪,有人成為英雄,有人扮演小丑,有人挺身而出,有人迷惘沉淪。但你只需——“在繁華中自律,在落魄中自愈,

前言

手執煙花以謀生 心懷詩意以謀愛

不論我是否去記錄,在往昔與未來的無限歲月中,仍會有人奮起,有人沉淪,有人成為英雄,有人扮演小丑,有人挺身而出,有人迷惘沉淪。但你只需——“在繁華中自律,在落魄中自愈,在謀生的路上不拋棄良知,在謀愛的路上不丟失最嚴,這次我站在風中,任你大霧四起。”


HashMap的設計原理

1. HashMap設計思路:
  1. Map是一種以鍵值對存儲數據的容器,而 HashMap 則是借助了鍵值 Key 的 hashcode 值來組織存儲,使得可以非??焖俸透咝У氐馗鶕I值 key 進行數據的存取。
  2. 對于鍵值對,HashMap 內部會將其封裝成一個對應的 Entry 對象,即 Entry 對象是鍵值對的組織形式;
  3. 對于每個對象而言,JVM 都會為其生成一個 hashcode 值。HashMap 在存儲鍵值對 Entry 的時候,會根據 Key 的 hashcode 值,以某種映射關系,決定應當將這對鍵值對 Entry 存儲在 HashMap 中的什么位置上;
  4. 當通過 Key 值取數據的時候,然后根據 Key 值的 hashcode 和 內部映射條件,直接定位到 Key 對應的 Value 值存放在什么位置,可以非常高效地將 Value 值取出。

HashMap 的哈希函數設計

hash 函數是先拿到 key 的 hashcode,是一個32位的 int 值,然后讓 hashcode 的高16位和低16位進行異或操 作

也叫擾動函數,這么設計有二點原因

  1. 一定要盡可能降低 hash 碰撞,越分散越好;
  2. 算法一定要盡可能高效,因為這是高頻操作, 因此采用位運算;

什么是Hash?

    Hash,一般翻譯做“散列”,也有直接音譯為“哈?!钡模褪前讶我忾L度的 `輸入`,通過散列算法變換成固定長度的 `輸出`,該輸出就是散列值。ok,這樣的定義可能比較抽象。咱們結合上面提到的方案二的例子一句一句解釋。
  • 比如:人的姓名就是一個任意長度的輸入。Z-張三 11; L-李四 22;W-王五 33
  • 然后,直接去Z分類里邊兒找,一發入魂。但是如果出現很多姓名的首字母是Z的人,比如Z-趙六 44、Z-周七 55,當我存的電話多起來,我一樣需要找好多次?!野凑招彰氖鬃帜傅拇髮懭ミM行一個分類,這個劃分的方式我們可以看成是散列算法。
  • 最后,在本子上以姓名的首字母劃分,并記錄電話號碼——固定長度的輸出,即我把所有的電話全部存入了26個分類中。那么這26個字母就是散列值。

    ? HashMap 的數據結構(JDK 1.8)

    本文說的是 JDK1.8 版本的,內部使用數組 + 鏈表紅黑樹

  • 在 Jdk1.8 中 HashMap 的實現方式做了一些改變,但是基本思想還是沒有變得,只是在一些地方做了 優化,下面來看一下這些改變的地方:數據結構的存儲由數組+鏈表的方式,變化為 數組+鏈表+紅黑樹的存儲方式,當鏈表長度超過 閾值(8) 時,將 鏈表轉換為紅黑樹。在性能上進一步得到提升。
  • 數組:數組存儲區間是連續的,占用內存嚴重,故空間復雜度很大。但數組的二分查找時間復雜度小,為O(1);數組的特點是:尋址容易,插入和刪除困難; 空間復雜度:指的是執行算法所需要的內存空間 時間復雜度:執行算法所需要的計算工作量
  • 鏈表:鏈表存儲區間離散,占用內存比較寬松,故空間復雜度很小,但時間復雜度很大,達O(N)。鏈表的特點是:尋址困難,插入和刪除容易。
  • 紅黑樹:

    JDK1.8 對 HashMap 主要做了哪些優化呢?

    1. 數組 + 鏈表改成了數組 + 鏈表或紅黑樹;
    2. 鏈表的插入方式從頭插法改成了尾插法,簡單說就是插入時,如果數組位置上已經有元素,1.7 將新元 素放到數組中,原始節點作為新節點的后繼節點,1.8 遍歷鏈表,將元素放置到鏈表的最后;
    3. 擴容的時候 1.7 需要對原數組中的元素進行重新 hash 定位在新數組的位置,1.8 采用更簡單的判斷邏 輯,位置不變或索引 + 舊容量大小;
    4. 在插入時,1.7 先判斷是否需要擴容,再插入,1.8 先進行插入,插入完成再判斷是否需要擴容;

    ?為什么要做這幾點優化

    1. 防止發生 hash 沖突,鏈表長度過長,將時間復雜度由 O(n) 降為 O(logn) ;
    2. 因為 1.7 頭插法擴容時,頭插法會使鏈表發生反轉,多線程環境下會產生環; A 線程在插入節點 B,B 線程也在插入,遇到容量不夠開始擴容,重新 hash,放置元素,采用頭插法, 后遍歷到的 B 節點放入了頭部,這樣形成了環,如下圖所示:

    1.7 的擴容調用 transfer 代碼,如下所示:

    void transfer(Entry[] newTable, boolean rehash) {int newCapacity = newTable.length;for (Entry<K,V> e : table) {while(null != e) {Entry<K,V> next = e.next;if (rehash) {e.hash = null == e.key ? 0 : hash(e.key);} int i = indexFor(e.hash, newCapacity);e.next = newTable[i]; //A線程如果執行到這一行掛起,B線程開始進行擴容newTable[i] = e;e = next;}}}  
    1. 擴容的時候為什么 1.8 不用重新 hash 就可以直接定位原節點在新數據的位置 這是由于擴容是擴大為原數組大小的 2 倍,用于計算數組位置的掩碼僅僅只是高位多了一個 1,怎么理 解呢? 擴容前長度為 16,用于計算 (n-1) & hash 的二進制 n-1 為 0000 1111,擴容為 32 后的二進制就高位多 了 1,為 0001 1111。 因為是 & 運算,1 和任何數 & 都是她本身,那就分二種情況,如下圖:原數據 hashcode 高位第 4 位為 0 和高位為 1 的情況; 第四位高位為 0,重新 hash 數值不變,第四位為 1,重新 hash 數值比原來大 16(舊數組的容量)
  •  
    (文/媒體小英)
    免責聲明
    本文僅代表作發布者:媒體小英個人觀點,本站未對其內容進行核實,請讀者僅做參考,如若文中涉及有違公德、觸犯法律的內容,一經發現,立即刪除,需自行承擔相應責任。涉及到版權或其他問題,請及時聯系我們刪除處理郵件:weilaitui@qq.com。
     

    Copyright ? 2016 - 2025 - 企資網 48903.COM All Rights Reserved 粵公網安備 44030702000589號

    粵ICP備16078936號

    微信

    關注
    微信

    微信二維碼

    WAP二維碼

    客服

    聯系
    客服

    聯系客服:

    在線QQ: 303377504

    客服電話: 020-82301567

    E_mail郵箱: weilaitui@qq.com

    微信公眾號: weishitui

    客服001 客服002 客服003

    工作時間:

    周一至周五: 09:00 - 18:00

    反饋

    用戶
    反饋

    欧美亚洲自拍偷拍_日本一区视频在线观看_国产二区在线播放_亚洲男人第一天堂

          狠狠色噜噜狠狠狠狠色吗综合| 亚洲一区黄色| 麻豆91精品| 欧美+日本+国产+在线a∨观看| 国产乱码精品一区二区三区忘忧草| 亚洲国产视频a| 老司机aⅴ在线精品导航| 国产欧美一区二区精品性| 99国产精品视频免费观看| 免费在线观看日韩欧美| 激情文学综合丁香| 久久国产精品一区二区| 国产精品高精视频免费| 亚洲视屏一区| 国产精品欧美久久久久无广告| 一区二区三区久久久| 欧美激情一区在线观看| 亚洲激情视频网| 欧美国产视频一区二区| 亚洲国产裸拍裸体视频在线观看乱了| 久久天堂av综合合色| 欧美在线观看视频一区二区| 亚洲欧美国产毛片在线| 宅男噜噜噜66国产日韩在线观看| 亚洲欧洲在线播放| 亚洲第一精品夜夜躁人人躁 | 国产精品久久一区二区三区| 亚洲精品一区二区三区婷婷月| 欧美二区在线播放| 亚洲伦理久久| 国产精品wwwwww| 午夜精品久久久久久久久| 国产一区二区| 免费成人毛片| 制服丝袜激情欧洲亚洲| 国产精品老牛| 欧美中文在线观看| 亚洲第一级黄色片| 欧美日韩一区成人| 性欧美超级视频| 尤物九九久久国产精品的特点 | 国产午夜精品麻豆| 久久视频在线免费观看| 亚洲另类黄色| 国产美女精品人人做人人爽| 久久精品九九| 亚洲人成啪啪网站| 国产精品午夜在线观看| 久久在线观看视频| 99热免费精品在线观看| 国产亚洲精品久久久久久| 美女网站久久| 亚洲香蕉网站| 亚洲国产高清在线| 国产精品久久久久久av下载红粉 | 国产精品久久久久久久午夜| 午夜精品理论片| 亚洲第一精品电影| 国产精品va在线播放| 久久这里只精品最新地址| 一本色道久久综合狠狠躁篇的优点| 国产精品亚洲片夜色在线| 米奇777在线欧美播放| 亚洲影视综合| 亚洲精品日韩激情在线电影| 国产欧美日韩| 欧美视频日韩视频| 麻豆免费精品视频| 欧美一级网站| 中文一区在线| 日韩亚洲欧美中文三级| 久久gogo国模啪啪人体图| 欧美日韩国产不卡在线看| 精品动漫3d一区二区三区免费| 中日韩男男gay无套| 久久综合伊人77777| 国产欧美精品一区二区三区介绍| 欧美日韩性视频在线| 久久蜜桃精品| 久久久精品一区二区三区| 午夜精品影院在线观看| 亚洲国产日韩欧美在线图片| 国产一区 二区 三区一级| 国产精品高潮呻吟| 欧美日韩精品一区视频| 欧美福利电影网| 欧美成人久久| 欧美大香线蕉线伊人久久国产精品| 午夜在线播放视频欧美| 亚洲一区区二区| 亚洲一区二区日本| 亚洲一区久久久| 亚洲午夜精品国产| 亚洲校园激情| 亚洲欧美日韩另类| 亚洲欧美不卡| 午夜亚洲影视| 久久岛国电影| 久久久久中文| 亚洲激情国产| 欧美人与禽猛交乱配视频| 亚洲韩国青草视频| 99www免费人成精品| 狠狠久久五月精品中文字幕| 国产亚洲aⅴaaaaaa毛片| 国产亚洲精品久| 在线观看成人av| 亚洲国产精品热久久| 亚洲人成人一区二区三区| 亚洲美女中文字幕| 一本大道久久a久久综合婷婷 | 亚洲自拍偷拍视频| 国产精品夜夜夜| 久久精品国产亚洲精品| 黄色另类av| 欧美激情精品久久久| 亚洲午夜一区二区三区| 亚洲色无码播放| 亚洲日本中文| 亚洲女人av| 老司机成人网| 欧美性猛交xxxx乱大交蜜桃| 国产精品亚发布| 在线看片成人| 亚洲视频1区| 久久九九热re6这里有精品| 美国十次了思思久久精品导航| 欧美电影在线| 国产精品无码专区在线观看| 国内精品久久久久久久果冻传媒| 亚洲国产成人精品久久| 一区二区三区www| 久久久91精品| 欧美日韩在线观看视频| 国产一区二区成人| 亚洲精品视频在线播放| 亚洲欧美日韩一区二区三区在线 | 午夜精品国产更新| 亚洲国产另类久久精品| 国产欧美日韩亚洲| 欧美日韩一区二区三区免费看| 欧美在线高清| 亚洲素人在线| 欧美jizzhd精品欧美巨大免费| 欧美激情一区二区三区成人 | 国产精品一二三视频| 揄拍成人国产精品视频| 亚洲图片欧美午夜| 欧美国产第二页| 国精品一区二区三区| 一区二区三区成人精品| 久久五月激情| 国产精品一区三区| 一本久道久久综合婷婷鲸鱼 | 久久精选视频| 国产精品高潮粉嫩av| 亚洲国产精品99久久久久久久久| 亚洲欧美日韩精品在线| 欧美伦理91i| 99国产精品视频免费观看| 久久激情五月激情| 国产精品日本一区二区| 亚洲精品日韩在线| 久久亚洲综合| 国产一二三精品| 午夜精品久久久久久久久| 欧美日韩专区| 9久re热视频在线精品| 毛片av中文字幕一区二区| 国产在线观看精品一区二区三区| 亚洲丝袜av一区| 欧美性猛交99久久久久99按摩| 91久久久久久| 欧美国产精品va在线观看| 尤物在线精品| 免费成人黄色| 亚洲日本在线视频观看| 欧美a级片一区| 亚洲欧洲在线观看| 欧美成人一区二区三区在线观看| 亚洲第一精品影视| 免费欧美网站| 亚洲精品极品| 欧美另类高清视频在线| 亚洲精选国产| 欧美色视频一区| 亚洲一区二区三区久久| 国产精品久久久一区二区三区| 国产精品99久久99久久久二8| 欧美性jizz18性欧美| 国产精品99久久久久久白浆小说| 欧美精品亚洲一区二区在线播放| 亚洲精品欧洲精品| 国产精品久久久久秋霞鲁丝| 欧美日韩国产一级| 国产网站欧美日韩免费精品在线观看| 一区二区在线视频观看| 9l视频自拍蝌蚪9l视频成人| 亚洲欧美激情精品一区二区| 久久不射中文字幕|