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