摘要:筆記今天學習了中的和區別,簡單記錄下。因為每次操作都會設計鏈表的第一個元素,所以只給鏈表第一位元素加鎖如果有哪些不對的地方煩請指認,先行感謝
Map 筆記
今天學習了 map 中的 hashMap 和 concurrentHashMap 區別,簡單記錄下。
1.JDk1.7hashmap:
hashmap 是數組和鏈表的組合結構,線程不安全
hashmap 默認長度為 16,默認加載因子為 0.75,hashmap 添加數據時,添加后的長度大于等于原來長度*加載因子時會擴容,默認增加為原來的 2 倍
hashmap 指定長度和加載因子初始化構造方法時,hashmap 的長度初始化為大于等于指定長度的 2 的次方的值
hashmap 的長度總是為 2 的次方,主要是為了方便通過尋找到 entry 對象存在那個數組節點。
put() 方法操作時,先通過 hashcode 位運算和與運算后得到 hash,再通過 hash & (hashmap長度-1) 尋找到entry對象存在那個數組節點,然后得到這個節點存放的鏈表,如果為 null,直接存放,如果不為 null,則通過 key 判斷是否有自己存放的 key 的 entry,有直接替換 value,返回 oldvalue,如果沒有判斷鏈表長度,最后放在鏈表頭部,然后存放鏈表原來頭部 entry 的下標 next,鏈表下移
擴容時,數組元素中鏈表的順序和原來存放的順序剛好相反,并且會出現死循環的問題
hashtable:線程安全,給 put() 方法加了個 synchronized,效率慢
concurrentHashMap: 構造方法中比 hashmap 多個級別level的參數,該 map 把一個entry數組分為了 level 個,segment,并且每個都加鎖,每個 segment 的長度為 map 的長度/level
hashmap:
相對于 jdk1.7 的區別:
put() 方法插入元素,追加在鏈表的尾部,而不是插入頭部再向下移動一位
鏈表長度大于等于8時會樹化為紅黑樹結構
concurrentHashMap:
相對于 jdk1.7 的區別:沒有了 segment。因為每次操作都會設計鏈表的第一個元素,所以只給鏈表第一位元素加鎖
如果有哪些不對的地方煩請指認,先行感謝
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/75348.html
摘要:二求文件中包含包租婆的行數從一個總計行的文件中找出所有包含包租婆的行數,我們不用太動腦筋就有一個算法讀一行,判斷這一行有包租婆嗎如果有,全局變量加。在臺機器上分別執行笨辦法計算包含包租婆的行數。 一、搬磚 vs. 分布式計算 一個人搬磚很累,幾個人一起搬就會輕松很多,也會快很多: showImg(https://segmentfault.com/img/bVp6EK); 分布并行計算和...
摘要:簡單模式記錄多個累加值在之前的版本中,我們創建了很多中間變量,。接下來,我們給自己設一個挑戰,使用鏈式操作,將所有的函數調用組合起來,不再使用中間變量。你甚至可以繼續簡化上述代碼,移除不必要的中間變量,讓最終的計算代碼只有一行。 譯者按: 有時候一個算法的直觀、簡潔、高效是需要作出取舍的。 原文: FUNCTIONAL JAVASCRIPT: FIVE WAYS TO CALCULA...
摘要:經過上述討論,我們發現,哈希查找的時間復雜度最小沒有沖突是二是什么首先是中的一個接口。在中,有很多類實現了接口,就是其中的一個三是什么是一個實現了接口的基于哈希表的類。 我們要想知道HashMap是什么就先要了解Hash和Map是什么 一、Hash是什么 ① 哈希查找是一種數據結構中用于 查找 的算法,相比于其他查找算法,他的時間復雜度更 低,所以在實際應用中大量采取了哈希表的方...
閱讀 3028·2021-09-08 10:43
閱讀 1031·2019-08-30 15:53
閱讀 964·2019-08-30 13:51
閱讀 836·2019-08-29 14:03
閱讀 796·2019-08-26 18:35
閱讀 1229·2019-08-26 13:38
閱讀 1580·2019-08-26 10:34
閱讀 3497·2019-08-26 10:21