HashMap基礎與併發

2022-08-18 09:15:13 字數 654 閱讀 5420

執行緒不安全的hashmap, hashmap在併發執行put操作時會引起死迴圈,是因為多執行緒會導致hashmap的entry鍊錶形成環形資料結構,查詢時會陷入死迴圈。

預設初始化大小為16,之後每次擴充,容量變為原來的2倍

預設載入因子為0.75

modcount作用:

迭代器每修改一次就 +1 

hashmap 不是執行緒安全的,因此如果在使用迭代器的過程中有其他執行緒修改了map,那麼將丟擲concurrentmodificationexception,這就是所謂fail-fast策略

擾動函式: 

hashmap的底層是雜湊陣列,陣列元素為entry。hashmap通過key的hashcode來計算hash值,當hashcode相同時,通過「拉鍊法」解決衝突

jdk1.8在解決雜湊衝突時有了較大的變化,當鍊表長度大於閾值(預設為8)時,將鍊錶轉化為紅黑樹,以減少搜尋時間。原本map.entry介面的實現類entry改名為了node。轉化為紅黑樹時改用另一種實現treenode。 

高併發下的HashMap

1.hashmap在插入元素過多的時候需要進行resize,resize的條件是 hashmap.size capacity loadfactor。2.hashmap的resize包含擴容和rehash兩個步驟,rehash在併發的情況下可能會形成鍊錶環 hashmap進行儲存時,假設size超過當...

Java高併發基礎篇 併發與執行緒(一)

執行緒是輕量級程序,是程式執行的最小單位 在介紹執行緒之前,我們必須要知道程序的概念。程序 process 是計算機中的程式關於某資料集合上的一次執行活動,是系統進行資源分配和排程的基本單位,是作業系統結構的基礎。程序是程式的基本執行體,執行緒的容器。程式是指令 資料及其組織形式的描述,程序是程式的...

基礎 HashMap的遍歷

map map new hashmap iterator it map.entryset iterator while it.hasnext 最簡寫形式 for map.entryentry map.entryset entry.getvalue 這種方法的效率高一些 至於為什麼 待補充 map m...