日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

探秘HashMap:有趣的算法之旅

來源: 責編: 時間:2024-03-18 17:43:34 249觀看
導讀HashMap是Java中非常重要且被廣泛使用的數據結構,其內部實現充滿了有趣而復雜的算法。我們研究下HashMap內部的一些核心算法,包括哈希沖突的解決、擴容策略、樹化與樹退化等。1. 容量計算方法即tableSizeFor方法。其主

tRu28資訊網——每日最新資訊28at.com

HashMap是Java中非常重要且被廣泛使用的數據結構,其內部實現充滿了有趣而復雜的算法。我們研究下HashMap內部的一些核心算法,包括哈希沖突的解決、擴容策略、樹化與樹退化等。tRu28資訊網——每日最新資訊28at.com

1. 容量計算方法

tableSizeFor方法。其主要目的是確保HashMap的容量始終是2的冪次方,這一特性對HashMap的哈希算法和擴容策略都至關重要。tRu28資訊網——每日最新資訊28at.com

// cap為用戶傳入的map初始化大小,將返回一個大于該數的,距離最近的2的冪次方static final int tableSizeFor(int cap) {    int n = -1 >>> Integer.numberOfLeadingZeros(cap - 1);    return (n < 0) ? 1 : (n >= MAXIMUM_CAPACITY) ? MAXIMUM_CAPACITY : n + 1;}
  • Integer.numberOfLeadingZeros(cap - 1): 這個方法返回參數cap - 1的二進制表示中,從最高位開始連續的零的個數。這個值實際上表示了cap的二進制表示中,最高位的位置(不包括符號位)。
  • -1 >>> Integer.numberOfLeadingZeros(cap - 1): 這一步通過將-1右移numberOfLeadingZeros位,實際上將最高位至numberOfLeadingZeros位之間的所有位都置為1,其余位為0。這樣做的目的是為了確保在后續的計算中,得到的值是一個2的冪次方減1的形式。
  • (n < 0) ? 1 : (n >= MAXIMUM_CAPACITY) ? MAXIMUM_CAPACITY : n + 1: 這一步對上述得到的值進行判斷和修正。如果計算結果小于0,說明cap為0,因此將容量設為1;如果計算結果超過了MAXIMUM_CAPACITY,即HashMap的最大容量限制,將容量設為MAXIMUM_CAPACITY;否則,將容量設為n + 1。這里的n + 1保證了返回的容量是2的冪次方。

總的來說,tableSizeFor方法確保了HashMap的容量始終是2的冪次方。這種容量設置的方式有助于提高哈希算法的性能,同時與HashMap的擴容策略密切相關。這樣的設計使得HashMap在進行哈希計算時,可以通過位運算,取代一些昂貴的除法運算,從而提高計算效率。tRu28資訊網——每日最新資訊28at.com

tRu28資訊網——每日最新資訊28at.com

2. 哈希沖突:鏈表和紅黑樹

在HashMap中,哈希沖突是指不同的鍵可能映射到相同的索引位置的情況。為了解決沖突,HashMap采用了拉鏈法,即將具有相同哈希碼的鍵值對存儲在同一個數組位置,以鏈表的形式。tRu28資訊網——每日最新資訊28at.com

class Node<K, V> {    final int hash;    final K key;    V value;    Node<K, V> next;    Node(int hash, K key, V value, Node<K, V> next) {        this.hash = hash;        this.key = key;        this.value = value;        this.next = next;    }}

上述Node類表示HashMap中的一個節點,包含了鍵、值、哈希碼以及指向下一個節點的引用。當沖突的鏈表長度超過一定閾值(默認為8)時,HashMap會將鏈表轉換為紅黑樹,以提高查找效率。tRu28資訊網——每日最新資訊28at.com

static final int TREEIFY_THRESHOLD = 8;// 當鏈表長度達到8時,將鏈表轉換為紅黑樹void treeifyBin(Node<K, V>[] tab, int hash) {    // ...    if (n >= TREEIFY_THRESHOLD) {        // 執行轉換為紅黑樹的操作        treeifyBin(tab, hash);        // ...    }    // ...}

tRu28資訊網——每日最新資訊28at.com

3. 擴容:2 的冪次方擴容

當HashMap的元素數量達到一定負載因子時(默認為0.75),為了避免鏈表過長,會觸發擴容操作。在擴容時,HashMap將數組容量擴大至原來的兩倍,并重新計算所有元素的索引位置。tRu28資訊網——每日最新資訊28at.com

void resize() {    int oldCap = table.length;    int newCap = oldCap << 1;    // 創建新的數組,大小為原來的兩倍    Node<K, V>[] newTab = new Node[newCap];    // 重新計算元素在新數組中的位置    // ...    table = newTab;}

oldCap表示原數組的容量,newCap表示新數組的容量,通過位運算將原容量左移一位實現擴容。tRu28資訊網——每日最新資訊28at.com

4. 哈希碼計算:擾動函數

為了減小哈希沖突的概率,HashMap采用了擾動函數,將鍵的哈希碼進行“擾動”。tRu28資訊網——每日最新資訊28at.com

static final int hash(Object key) {    int h;    return (key == null) ? 0 : (h = key.hashCode()) ^ (h >>> 16);}

這里的hash方法通過異或運算和無符號右移等位運算,將鍵的哈希碼進行擾動,增加哈希碼的隨機性。tRu28資訊網——每日最新資訊28at.com

tRu28資訊網——每日最新資訊28at.com

5. 樹化與樹退化

為了提高查找效率,當鏈表長度超過一定閾值(默認為8)時,HashMap會將鏈表轉化成紅黑樹。而在刪除或鏈表長度過短時,紅黑樹又可能退化成鏈表。tRu28資訊網——每日最新資訊28at.com

static final int UNTREEIFY_THRESHOLD = 6;// 將紅黑樹退化為鏈表void untreeify(Node<K, V>[] tab) {    // ...    if ((n <= UNTREEIFY_THRESHOLD) && (first instanceof TreeNode))        // 執行退化為鏈表的操作        untreeify(tab);    // ...}

UNTREEIFY_THRESHOLD是一個閾值,表示當紅黑樹的節點數小于等于6時,將紅黑樹退化為鏈表。tRu28資訊網——每日最新資訊28at.com

6. 負載因子和重新哈希

負載因子是HashMap決定是否需要進行擴容的一個關鍵參數。當HashMap中的元素數量達到容量與負載因子的乘積時,就會觸發擴容。在擴容時,HashMap會重新計算所有元素的索引位置,這個過程稱為重新哈希。tRu28資訊網——每日最新資訊28at.com

static final float DEFAULT_LOAD_FACTOR = 0.75f;void addEntry(int hash, K key, V value, int bucketIndex) {    // ...    if ((size >= threshold) && (null != table[bucketIndex])) {        // 執行重新哈希的操作        resize();        // ...    }    // ...}

DEFAULT_LOAD_FACTOR是一個默認的負載因子,表示當元素數量達到容量的75%時,觸發擴容。tRu28資訊網——每日最新資訊28at.com

通過這些代碼示例,我們可以稍微了解到HashMap內部的一些核心算法。這些算法保證了HashMap在面對不同場景時能夠保持高效的性能,同時保證了數據結構的穩定性。深入了解這些算法不僅有助于我們理解HashMap的內部工作原理,還能夠在需要的情況下更好地優化我們的代碼。希望通過這次的有趣之旅,大家對HashMap內部的奧秘有了更深層次的理解。tRu28資訊網——每日最新資訊28at.com

本文鏈接:http://m.www897cc.com/showinfo-26-77526-0.html探秘HashMap:有趣的算法之旅

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 如何在Selenium中查找第一個元素和所有元素

下一篇: 故障現場 | 消息發送居然有這么大的坑

標簽:
  • 熱門焦點
Top 日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不
久久精品中文字幕一区二区三区| 亚洲一级黄色| 黄色一区二区在线| 亚洲电影自拍| 宅男噜噜噜66一区二区| 性伦欧美刺激片在线观看| 久久午夜电影网| 欧美日韩国产区| 国产精品美女久久久久久久| 国产欧美日韩免费| 亚洲福利视频免费观看| 夜夜嗨av一区二区三区四季av| 亚洲一区三区电影在线观看| 久久久久在线观看| 欧美偷拍一区二区| 激情婷婷亚洲| 在线亚洲欧美视频| 久久嫩草精品久久久久| 欧美午夜精品久久久久久超碰| 国产一区二区无遮挡| 日韩视频在线一区二区三区| 欧美一区视频| 欧美精品三级| 国产一区二区三区黄| 亚洲美女色禁图| 久久精品国产69国产精品亚洲| 欧美人妖另类| 国产一二精品视频| 免费观看欧美在线视频的网站| 欧美一区二区精品久久911| 国产精品久久久久aaaa樱花| 欧美视频在线观看免费网址| 国产亚洲激情| 一区二区三区精品国产| 欧美好吊妞视频| 国内精品久久久久影院优| 久久精品视频一| 欧美一区在线直播| 99精品免费| 国产欧美三级| 日韩一级黄色av| 国产欧美精品一区二区色综合| 最新日韩在线视频| 国产综合激情| 欧美日韩美女在线| 久久婷婷国产麻豆91天堂| 9久re热视频在线精品| 亚洲国产精品一区| 伊人激情综合| 午夜国产精品视频免费体验区| 欧美国产日韩免费| 国产在线观看91精品一区| 欧美日韩色婷婷| 亚洲视频免费在线观看| 亚洲美女av黄| 国产日韩欧美a| 欧美a级理论片| 亚洲午夜电影| 亚洲国产成人精品久久久国产成人一区| 国产精品日韩欧美一区二区三区| 久久综合电影| 国产日韩av在线播放| 欧美日韩精品三区| 欧美成人一区二区三区片免费| 农夫在线精品视频免费观看| 欧美电影打屁股sp| 欧美激情一区二区三区蜜桃视频 | 亚洲欧美国产毛片在线| 免播放器亚洲一区| 韩国一区二区三区在线观看 | 欧美国产免费| 亚洲电影在线看| 久久一区免费| 精品白丝av| 久久精品女人的天堂av| 国产精品尤物福利片在线观看| 亚洲伊人第一页| 欧美日韩a区| 亚洲免费播放| 欧美女主播在线| 亚洲精品影院在线观看| 欧美片在线观看| 99精品免费视频| 欧美天堂亚洲电影院在线播放| 一区二区免费在线观看| 欧美三区不卡| 亚洲一二区在线| 国产精品日韩在线一区| 午夜精品美女自拍福到在线| 国产伦精品一区二区三区免费迷| 欧美亚洲日本国产| 国产一区二区精品久久99| 久久精品免视看| 亚洲国产成人av好男人在线观看| 欧美成人午夜剧场免费观看| 亚洲精品一区二| 欧美日韩在线另类| 午夜天堂精品久久久久| 狠狠色噜噜狠狠色综合久 | 国产欧美日韩一级| 欧美在线观看一区二区| 黑人一区二区| 美女视频一区免费观看| 日韩视频一区二区三区在线播放免费观看| 欧美日韩国产综合新一区| 亚洲一区二区三区中文字幕在线| 国产美女诱惑一区二区| 欧美亚洲自偷自偷| 极品日韩久久| 欧美人妖另类| 亚洲欧美日韩国产一区二区三区| 国产亚洲成av人片在线观看桃| 久久先锋影音av| 最新国产精品拍自在线播放| 欧美日韩1区| 亚洲免费视频网站| 狠狠久久亚洲欧美| 欧美激情第三页| 亚洲女人天堂av| 一区二区在线不卡| 欧美日韩999| 欧美有码在线视频| 亚洲激情不卡| 国产精品女主播| 久久免费视频网站| 99re这里只有精品6| 国产精一区二区三区| 美女国产一区| 在线视频日韩精品| 韩日欧美一区| 欧美日韩综合视频| 久久久www成人免费无遮挡大片 | 91久久视频| 国产精品欧美日韩一区| 久久亚洲风情| 亚洲视频成人| 一区二区视频免费在线观看 | 亚洲国产精品免费| 国产精品久久久久毛片大屁完整版| 欧美一二三区精品| 亚洲人成在线播放网站岛国| 国产精品午夜电影| 欧美黄色精品| 久久国产加勒比精品无码| 亚洲精品国产拍免费91在线| 国产精品青草久久| 欧美成人四级电影| 欧美一区二区在线观看| 日韩亚洲不卡在线| 精品不卡在线| 国产精品高清在线| 看欧美日韩国产| 亚洲欧美日韩国产成人精品影院| 亚洲电影免费观看高清| 国产伦精品一区| 欧美日本精品| 久久婷婷蜜乳一本欲蜜臀| 亚洲尤物在线| 亚洲精品中文字幕在线| 国内一区二区在线视频观看| 国产精品国产自产拍高清av| 欧美国产日本在线| 久久中文字幕一区二区三区| 欧美一区二区免费观在线| 一区二区三区欧美在线| 亚洲夫妻自拍| 国产热re99久久6国产精品| 欧美日韩中文字幕日韩欧美| 欧美成人精精品一区二区频| 久久精品一本| 午夜精品久久久久影视| 中日韩视频在线观看| 亚洲精品久久视频| 亚洲第一区中文99精品| 国内不卡一区二区三区| 国产欧美精品| 国产精品v日韩精品| 欧美片网站免费| 欧美 日韩 国产精品免费观看| 久久久久国产免费免费| 午夜久久99| 亚洲桃花岛网站| 在线一区二区日韩| 99re热这里只有精品视频| 亚洲三级影院| 亚洲精品系列| 亚洲精品乱码久久久久久蜜桃麻豆| 尹人成人综合网| 国产综合自拍| 国产精品伊人日日| 国产精品欧美在线| 国产精品久久久久久久久久久久久| 欧美日韩精品| 欧美日韩亚洲综合一区| 欧美日韩国产综合视频在线观看中文| 欧美不卡在线| 欧美承认网站| 欧美精品久久99| 欧美精品高清视频| 欧美激情女人20p| 欧美精品在线视频| 欧美日本中文字幕| 欧美日韩一区二区三区在线观看免| 欧美日韩国产在线一区|