HashMap之鍊錶導致死迴圈

2021-09-02 18:28:02 字數 901 閱讀 2732

描述:hashmap採用拉鍊法(陣列鍊錶)解決hash衝突,因為是鍊錶結構,那麼就很容易形成閉合的鏈路。

在單執行緒情況下,只有乙個執行緒對hashmap的資料結構進行操作,是不可能產生閉合的迴路的。

那就只有在多執行緒併發的情況下才會出現這種情況,那就是在put操作的時候,如果size > nitialcapacity*loadfactor,那麼這時候hashmap就會進行rehash操作,隨之hashmap的結構就會發生翻天覆地的變化。很有可能就是在兩個執行緒在這個時候同時觸發了rehash操作,產生了閉合的迴路。

public v put(k key, v value)

}modcount++;

//table[i]為空,這時直接生成乙個新的entry放在table[i]上

addentry(hash, key, value, i);

return null;

}

void addentry(int hash, k key, v value, int bucketindex)

void resize(int newcapacity)

entry newtable = new entry[newcapacity];

//將舊的entry陣列的資料轉移到新的entry陣列上

transfer(newtable);

table = newtable;

threshold = (int)(newcapacity * loadfactor);

}

void transfer(entry newtable) while (e != null);}}

}

C C 分析陣列越界訪問導致死迴圈

閱讀下面 並分析導致其結果的原因 以下分析基於vs環境的除錯 include include intmain 擁有10個元素的整型陣列 for i 0 i 12 i 迴圈13次,越界訪問 system pause return0 分析 整型陣列arr有10個元素,for迴圈13次,導致陣列越界訪問。...

解析呼叫sort導致死迴圈問題的原因

記錄乙個sort問題 2020.8.7 更新 某位某里的 同學 說我這個錯是自己寫程式的問題。你的自定義比較函式直接返回true會有偏序問題,他是這麼說的,如果你傳遞進a,b和傳遞進b,a都返回true的話,那麼就無法判斷a和b誰大,就會造成問題 如果是在visual studio下debug模式編...

C語言中陣列越界導致死迴圈的測試

include 如何把這段 變成死迴圈,就像 c語言缺陷和陷阱 裡描述的那樣 經過測試發現,變數i的位址和a crazynum 的位址一樣,當執行 a crazynum 0 相當於i 0 所以死迴圈跑起來啦。測試環境 win7 32 dev c 4.9.9.2 c語言缺陷和陷阱 中的場景是編譯器按照...