JDK7 HashMap環(huán)的產(chǎn)生原理是怎樣的,針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。
創(chuàng)新互聯(lián)建站是一家專注于網(wǎng)站設計、成都網(wǎng)站建設與策劃設計,安康網(wǎng)站建設哪家好?創(chuàng)新互聯(lián)建站做網(wǎng)站,專注于網(wǎng)站建設十余年,網(wǎng)設計領域的專業(yè)建站公司;建站業(yè)務涵蓋:安康等地區(qū)。安康做網(wǎng)站價格咨詢:18980820575
成都創(chuàng)新互聯(lián)公司主營梓潼網(wǎng)站建設的網(wǎng)絡公司,主營網(wǎng)站建設方案,重慶APP開發(fā),梓潼h5小程序開發(fā)搭建,梓潼網(wǎng)站營銷推廣歡迎梓潼等地區(qū)企業(yè)咨詢
JDK7中當我們用頭插法 對舊table
數(shù)據(jù)重定位到新table
的時候我們知道是會行程環(huán)的,環(huán)產(chǎn)生的核心函數(shù)transfer
如下,其中重點關注部分以標出。
頭插法正常情況下:
并發(fā)情況下,比如我有兩個線程在同時進行put數(shù)據(jù)跟擴容操作,線程1只執(zhí)行了Entry
就被掛起了,而線程2正常執(zhí)行完畢,結果圖如下:
線程2執(zhí)行完畢后線程1接著從原來的暫停處開始執(zhí)行下面的語句:
通過逐步分析跟繪圖可以知道紅色部分會有環(huán)產(chǎn)生。JDK中HashMap是不安全的,多線程情況下要用ConcurrentHashMap。
7中找
Hash
用了4次,8中只用了1次。7 = 數(shù)組 + 鏈表,8 = 數(shù)組 + 鏈表 + 紅黑樹
7中是頭插法,多線程容易造成環(huán),8中是尾插法。
7的擴容是全部數(shù)據(jù)重新定位,8中是位置不變+ 移動舊size大小來實現(xiàn)更好些。
7是先判斷是否要擴容再插入,8中是先插入再看是否要擴容。
HashMap
不管78都是現(xiàn)場不安全的,多線程情況下記得用ConcurrentHashmap
。ConcurrentHashmap
下篇文章說。
隨機搜羅了一些常見HashMap
問題,如果把上述代碼都看懂了應付這些應該沒問題。
HashMap原理,內部數(shù)據(jù)結構。
HashMap中的put,get,remove大致過程。
HashMap中 hash函數(shù)實現(xiàn)。
HashMap如何擴容。
HashMap幾個重要參數(shù)為什么這樣設定。
HashMap為什么線程不安全,如何替換。
HashMap在JDK7跟JDK8中的區(qū)別。
HashMap中鏈表跟紅黑樹切換思路。
關于JDK7 HashMap環(huán)的產(chǎn)生原理是怎樣的問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注創(chuàng)新互聯(lián)行業(yè)資訊頻道了解更多相關知識。