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

二維碼
企資網(wǎng)

掃一掃關(guān)注

當(dāng)前位置: 首頁 » 企資快報 » 服務(wù) » 正文

HashMap的設(shè)計與優(yōu)化

放大字體  縮小字體 發(fā)布日期:2021-08-19 02:00:58    作者:媒體小英    瀏覽次數(shù):52
導(dǎo)讀

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

前言

手執(zhí)煙花以謀生 心懷詩意以謀愛

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


HashMap的設(shè)計原理

1. HashMap設(shè)計思路:
  1. Map是一種以鍵值對存儲數(shù)據(jù)的容器,而 HashMap 則是借助了鍵值 Key 的 hashcode 值來組織存儲,使得可以非常快速和高效地地根據(jù)鍵值 key 進(jìn)行數(shù)據(jù)的存取。
  2. 對于鍵值對,HashMap 內(nèi)部會將其封裝成一個對應(yīng)的 Entry 對象,即 Entry 對象是鍵值對的組織形式;
  3. 對于每個對象而言,JVM 都會為其生成一個 hashcode 值。HashMap 在存儲鍵值對 Entry 的時候,會根據(jù) Key 的 hashcode 值,以某種映射關(guān)系,決定應(yīng)當(dāng)將這對鍵值對 Entry 存儲在 HashMap 中的什么位置上;
  4. 當(dāng)通過 Key 值取數(shù)據(jù)的時候,然后根據(jù) Key 值的 hashcode 和 內(nèi)部映射條件,直接定位到 Key 對應(yīng)的 Value 值存放在什么位置,可以非常高效地將 Value 值取出。

HashMap 的哈希函數(shù)設(shè)計

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

也叫擾動函數(shù),這么設(shè)計有二點原因

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

什么是Hash?

    Hash,一般翻譯做“散列”,也有直接音譯為“哈希”的,就是把任意長度的 `輸入`,通過散列算法變換成固定長度的 `輸出`,該輸出就是散列值。ok,這樣的定義可能比較抽象。咱們結(jié)合上面提到的方案二的例子一句一句解釋。
  • 比如:人的姓名就是一個任意長度的輸入。Z-張三 11; L-李四 22;W-王五 33
  • 然后,直接去Z分類里邊兒找,一發(fā)入魂。但是如果出現(xiàn)很多姓名的首字母是Z的人,比如Z-趙六 44、Z-周七 55,當(dāng)我存的電話多起來,我一樣需要找好多次。——我按照姓名的首字母的大寫去進(jìn)行一個分類,這個劃分的方式我們可以看成是散列算法。
  • 最后,在本子上以姓名的首字母劃分,并記錄電話號碼——固定長度的輸出,即我把所有的電話全部存入了26個分類中。那么這26個字母就是散列值。

    ? HashMap 的數(shù)據(jù)結(jié)構(gòu)(JDK 1.8)

    本文說的是 JDK1.8 版本的,內(nèi)部使用數(shù)組 + 鏈表紅黑樹

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

    JDK1.8 對 HashMap 主要做了哪些優(yōu)化呢?

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

    ?為什么要做這幾點優(yōu)化

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

    1.7 的擴(kuò)容調(diào)用 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線程如果執(zhí)行到這一行掛起,B線程開始進(jìn)行擴(kuò)容newTable[i] = e;e = next;}}}  
    1. 擴(kuò)容的時候為什么 1.8 不用重新 hash 就可以直接定位原節(jié)點在新數(shù)據(jù)的位置 這是由于擴(kuò)容是擴(kuò)大為原數(shù)組大小的 2 倍,用于計算數(shù)組位置的掩碼僅僅只是高位多了一個 1,怎么理 解呢? 擴(kuò)容前長度為 16,用于計算 (n-1) & hash 的二進(jìn)制 n-1 為 0000 1111,擴(kuò)容為 32 后的二進(jìn)制就高位多 了 1,為 0001 1111。 因為是 & 運算,1 和任何數(shù) & 都是她本身,那就分二種情況,如下圖:原數(shù)據(jù) hashcode 高位第 4 位為 0 和高位為 1 的情況; 第四位高位為 0,重新 hash 數(shù)值不變,第四位為 1,重新 hash 數(shù)值比原來大 16(舊數(shù)組的容量)
  •  
    (文/媒體小英)
    免責(zé)聲明
    本文僅代表作發(fā)布者:媒體小英個人觀點,本站未對其內(nèi)容進(jìn)行核實,請讀者僅做參考,如若文中涉及有違公德、觸犯法律的內(nèi)容,一經(jīng)發(fā)現(xiàn),立即刪除,需自行承擔(dān)相應(yīng)責(zé)任。涉及到版權(quán)或其他問題,請及時聯(lián)系我們刪除處理郵件:weilaitui@qq.com。
     

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

    粵ICP備16078936號

    微信

    關(guān)注
    微信

    微信二維碼

    WAP二維碼

    客服

    聯(lián)系
    客服

    聯(lián)系客服:

    在線QQ: 303377504

    客服電話: 020-82301567

    E_mail郵箱: weilaitui@qq.com

    微信公眾號: weishitui

    客服001 客服002 客服003

    工作時間:

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

    反饋

    用戶
    反饋

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

          9000px;">

                欧美精品一区二区三| 一卡二卡欧美日韩| 国产.欧美.日韩| 欧美一区二区在线免费播放| 蜜臀久久99精品久久久久久9 | 成熟亚洲日本毛茸茸凸凹| 亚洲国产成人私人影院tom| 粗大黑人巨茎大战欧美成人| 一二三四社区欧美黄| 欧美一二三区在线| 成人深夜福利app| 天天综合色天天| 欧美激情中文字幕| 777午夜精品视频在线播放| 国产精品亚洲综合一区在线观看| 亚洲国产经典视频| 欧美顶级少妇做爰| 99久久精品久久久久久清纯| 蜜桃传媒麻豆第一区在线观看| 中文av一区二区| 欧美日韩黄色一区二区| 懂色av噜噜一区二区三区av| 日韩av一级片| 亚洲国产欧美日韩另类综合 | 久久精品一区二区三区四区| 亚洲成人在线网站| 久久久久综合网| 亚洲黄色在线视频| 欧美日本在线播放| 香蕉久久一区二区不卡无毒影院 | 欧美激情综合在线| 欧美人与禽zozo性伦| 91原创在线视频| 国产白丝精品91爽爽久久| 亚洲高清免费观看高清完整版在线观看| 久久久蜜臀国产一区二区| 欧美日韩日本视频| 91亚洲精品久久久蜜桃| 成人av资源下载| 国产在线视频一区二区| 青青草国产成人av片免费| 亚洲欧美日韩精品久久久久| 精品久久免费看| 欧美一级高清大全免费观看| 555www色欧美视频| 制服视频三区第一页精品| 91啪亚洲精品| 99综合电影在线视频| 成人激情开心网| 国产suv精品一区二区三区| 久久国内精品自在自线400部| 日韩精品欧美精品| 美女久久久精品| 久久精品国内一区二区三区| 麻豆91在线播放| 日本视频中文字幕一区二区三区| 一区二区三区美女| 亚洲午夜久久久久久久久电影院 | 99久久久无码国产精品| 国产91精品在线观看| 成人国产精品视频| 99精品久久只有精品| 麻豆专区一区二区三区四区五区| 亚洲风情在线资源站| 日韩中文字幕av电影| 日韩一区二区中文字幕| 日韩精品一区二区三区视频| 久久伊人中文字幕| 亚洲日本在线视频观看| 亚洲国产视频在线| 蜜臀久久99精品久久久久宅男 | 亚洲图片欧美视频| 理论片日本一区| 国产综合成人久久大片91| 成人一区在线看| 在线观看一区日韩| 欧美一级片在线观看| 久久久久久久久久久99999| 亚洲丝袜另类动漫二区| 亚洲成a天堂v人片| 国产成人免费在线观看| 色综合久久99| 日韩视频免费观看高清完整版| 亚洲精品一线二线三线无人区| 成人免费在线视频观看| 亚洲高清免费视频| 不卡免费追剧大全电视剧网站| 精品视频1区2区3区| 日本一区二区三区电影| 婷婷一区二区三区| 99精品在线观看视频| 精品久久五月天| 亚洲成在人线免费| 91在线观看免费视频| 久久久久久久久一| 人人狠狠综合久久亚洲| 91在线免费看| 国产欧美一二三区| 精品va天堂亚洲国产| 亚洲曰韩产成在线| 91精品国产91久久久久久最新毛片| 久久99精品国产91久久来源| 亚洲区小说区图片区qvod| 免费人成精品欧美精品 | 欧美肥胖老妇做爰| 亚洲日本一区二区三区| 国产69精品久久久久毛片 | 亚洲第一av色| 一本大道久久a久久精品综合| 久久亚洲一区二区三区明星换脸| 天天影视涩香欲综合网| 91黄色小视频| 樱桃国产成人精品视频| 91网址在线看| 1024国产精品| 成人av网站在线观看免费| 欧美精品久久久久久久多人混战| 日韩欧美美女一区二区三区| 日韩国产欧美三级| 欧美日韩一区 二区 三区 久久精品| 中文字幕中文字幕在线一区| 成人高清在线视频| 日韩欧美一级二级三级久久久| 亚洲电影第三页| 欧美三级三级三级| 伊人色综合久久天天| 一本久道久久综合中文字幕 | 欧美性受极品xxxx喷水| 中文字幕日本乱码精品影院| 国产一区二区三区视频在线播放| 3d成人动漫网站| 日本 国产 欧美色综合| 91麻豆精品国产91久久久使用方法| 亚洲自拍欧美精品| 91麻豆视频网站| 欧美激情一区在线观看| 99视频超级精品| 亚洲人成小说网站色在线 | 国产精品欧美久久久久一区二区| 欧美亚洲综合另类| 欧美色图激情小说| 久久综合色8888| 国产一区二区影院| 精品视频999| 精品在线你懂的| 久久综合五月天婷婷伊人| 国产suv精品一区二区6| 亚洲欧洲精品天堂一级| 欧美日韩一级片网站| 免费在线视频一区| 久久一区二区视频| 成人一级视频在线观看| 中文字幕久久午夜不卡| 欧美视频一区在线观看| 91精品国产一区二区| 日本欧美在线观看| 亚洲线精品一区二区三区八戒| 亚洲精品写真福利| 裸体歌舞表演一区二区| 91精品麻豆日日躁夜夜躁| 国产一区二区三区久久悠悠色av| 中文字幕第一区二区| 欧美在线免费视屏| 久久99国内精品| 亚洲午夜久久久久| 理论电影国产精品| 精品久久国产老人久久综合| 91精品1区2区| 在线观看av不卡| 国产99精品视频| 国产一区美女在线| 久久精品国产999大香线蕉| 久久99国内精品| 韩国女主播一区| 蜜臀av一区二区在线观看 | 欧美变态凌虐bdsm| 日韩欧美一级二级三级久久久| 欧美精品丝袜久久久中文字幕| 色激情天天射综合网| 色婷婷综合久久久中文一区二区| 91免费在线视频观看| 欧美日韩一区二区三区高清 | 91精品国产一区二区三区蜜臀| 欧美日韩国产不卡| 精品久久久久久久人人人人传媒| 欧美一级理论性理论a| 精品久久久久久久久久久久久久久 | 欧美日韩一区久久| 欧美夫妻性生活| 精品理论电影在线观看| 国产欧美日韩精品一区| 国产精品福利一区| 玉足女爽爽91| 日韩影院在线观看| 成人一区二区三区中文字幕| 成人动漫精品一区二区| 在线亚洲一区二区| 久久中文字幕电影| 中文字幕综合网| 亚洲二区在线观看|