Java:HashMap底層原理

一、前言

??在Java 7及之前的版本中,HashMap的底層數據結構主要是數組加鏈表,在Java 8中,HashMap的底層數據結構是數組+鏈表+紅黑樹的組合。

二、底層數據結構

1. 數組

??初始化和擴容:HashMap首先會初始化一個指定長度的數組,作為存儲數據的基本結構。當哈希表中的條目數超出了加載因子(默認為0.75)與當前容量的乘積時,會進行擴容操作,數組長度會擴展為大于原長度2倍的最近的2的n次方的值。
存儲位置:通過哈希函數計算鍵的哈希碼,然后使用哈希碼來確定鍵值對在數組中的存儲位置(即數組的下標)。

2. 鏈表

??哈希沖突:當不同的鍵通過哈希函數計算后得到相同的數組下標時,即發生了哈希沖突。此時,這些鍵值對會形成一個鏈表,存儲在同一個數組元素(桶)中。

??鏈表長度:在Java 8之前,鏈表是處理哈希沖突的唯一方式。而在Java 8中,當鏈表長度較短時(默認閾值為8之前),仍然使用鏈表來存儲沖突的鍵值對。

3. 紅黑樹

??鏈表過長時的優化:在Java 8中,當鏈表中的元素數量超過一定閾值(默認為8)時,并且數組的長度大于或等于64,鏈表會轉換為紅黑樹。這是為了優化在鏈表較長時的查找效率,因為紅黑樹在查找、插入和刪除操作上的性能通常優于鏈表。

??保持性能:紅黑樹的引入使得HashMap在處理大量數據和高哈希沖突時,仍然能夠保持較高的性能。

三、java8之前版本的區別

??性能優化:在Java 8之前,當哈希沖突較多時,鏈表會越來越長,導致查找效率下降。而在Java 8中,當鏈表長度超過閾值時,會自動轉換為紅黑樹,從而保持較高的查找效率。

??空間復雜度:引入紅黑樹雖然提高了性能,但也增加了空間復雜度。因為紅黑樹節點需要額外的空間來存儲父節點指針、顏色標記等信息。然而,這種空間上的開銷通常是可以接受的,因為它帶來了性能上的顯著提升。

??擴容邏輯:無論是Java 8之前還是之后,HashMap的擴容邏輯都是類似的。當哈希表中的條目數超出了加載因子(默認為0.75)與當前容量的乘積時,會進行擴容操作。擴容時,數組長度會擴展為大于原長度2倍的最近的2的n次方的值。

??哈希沖突解決:無論是鏈表還是紅黑樹,都是HashMap解決哈希沖突的方法。在Java 8之前,只使用鏈表;而在Java 8及以后版本中,當鏈表長度過長時,會轉換為紅黑樹以提高性能。

??綜上所述,Java 8中HashMap的底層數據結構通過引入紅黑樹來優化性能,特別是在處理大量數據和高并發場景時表現更為出色。這種設計使得HashMap在保持靈活性和易用性的同時,也具備了較高的性能和可擴展性。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/40431.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/40431.shtml
英文地址,請注明出處:http://en.pswp.cn/web/40431.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

單機多網卡互通——問題跟蹤+工具分析

一、背景 想搭建soft ROCE(RXE)與實體ROCE設備互聯的測試環境&#xff0c;為了節省機器以及使用方便&#xff0c;預想在配備ROCE卡的主機上&#xff0c;用另一個網卡綁定soft ROCE&#xff0c;然后互通。 [ETH1 ROCE] <--------------------> [ETH2 RXE] 二、問題跟…

Appium元素定位(全網詳細講解)(二)

1.appium inspector&#xff08;定位元素的工具&#xff09;使用方法 詳細介紹&#xff1a; 詳細解釋&#xff1a; 圖標名稱說明1Show Element Handles是否顯示元素句柄2Select Elements選擇元素定位3Tap/Swipe By Coordinates按坐標點擊/滑動4Download Screenshot下載屏幕截…

2024機器遺忘(Machine Unlearning)技術分類-思維導圖

1 介紹 機器遺忘&#xff08;Machine Unlearning&#xff09;是指從機器學習模型中安全地移除或"遺忘"特定的數據點或信息。這個概念源于數據隱私保護的需求&#xff0c;尤其是在歐盟通用數據保護條例&#xff08;GDPR&#xff09;等法規中提出的"被遺忘的權利…

【漏洞復現】飛企互聯-FE企業運營管理平臺——SQL注入

聲明&#xff1a;本文檔或演示材料僅供教育和教學目的使用&#xff0c;任何個人或組織使用本文檔中的信息進行非法活動&#xff0c;均與本文檔的作者或發布者無關。 文章目錄 漏洞描述漏洞復現測試工具 漏洞描述 飛企互聯-FE企業運營管理平臺是一個基于云計算、智能化、大數據…

【8】相關補充

【8】相關補充 文章目錄 前言一、不同模型在測試集上的精度二、實驗記錄三、SNP位點篩選及其它python腳本四、總結五、后續安排總結 前言 存放一些有關這個項目研究的補充。 三葉青圖像識別研究簡概 一、不同模型在測試集上的精度 存放了不同識別模型在測試集上精度評估展示…

Java中的時間日期處理與時區管理

Java中的時間日期處理與時區管理 大家好&#xff0c;我是免費搭建查券返利機器人省錢賺傭金就用微賺淘客系統3.0的小編&#xff0c;也是冬天不穿秋褲&#xff0c;天冷也要風度的程序猿&#xff01; 在現代軟件開發中&#xff0c;時間日期處理和時區管理是至關重要的部分。Jav…

Android HWASAN使用與實現原理

一、背景 為了提前檢測出Android User Sapce的app或native進程的內存錯誤問題&#xff0c;幫助研發定位與分析這些問題&#xff0c;基于Android 14版本上對HWASAN做了調研分析。 二、ASAN介紹 HWASAN是在ASAN的基礎上做了拓展&#xff0c;因此在介紹HWASAN之前先了解下ASAN.…

ES8.13.0 java client請求響應報錯status: 200, [es/search] Failed to decode response

最近在做商城項目使用ES8.13.0做商品復雜的檢索功能時&#xff0c;遇到一個報錯如下&#xff1a; 2024-07-05 10:47:53.994 ERROR 10708 --- [nio-7500-exec-1] com.tfq.exception.RRExceptionHandler : co.elastic.clients.transport.TransportException: node: http://1…

WBCE CMS v1.5.2 遠程命令執行漏洞(CVE-2022-25099)

前言 CVE-2022-25099 是一個影響 WBCE CMS v1.5.2 的嚴重安全漏洞&#xff0c;具體存在于 /languages/index.php 組件中。該漏洞允許攻擊者通過上傳精心構造的 PHP 文件在受影響的系統上執行任意代碼。 技術細節 受影響組件&#xff1a;/languages/index.php受影響版本&…

如何在 Odoo 16 中向新視圖添加字段

例如,讓我們看看如何在新視圖或新操作窗口中創建“many2one”字段。 請考慮下面的屏幕截圖,它表示不包含任何字段的新視圖類型或客戶端操作窗口。 我們現在可以將與“res.partner”關聯的“多對一”字段引入到我們的新視圖或客戶端操作窗口中。 為了實現這一點,在 XML 模板…

ShardingSphere

ShardingSphere 是一個開源的分布式數據庫中間件生態系統&#xff0c;由 Apache 基金會孵化和維護。它的主要目標是幫助開發者解決分庫分表、分布式事務和數據加密等分布式數據庫應用中的常見問題。ShardingSphere 提供了多種組件&#xff0c;如 Sharding-JDBC、Sharding-Proxy…

Using a text embedding model locally with semantic kernel

題意&#xff1a;在本地使用帶有語義核&#xff08;Semantic Kernel&#xff09;的文本嵌入模型 問題背景&#xff1a; Ive been reading Stephen Toubs blog post about building a simple console-based .NET chat application from the ground up with semantic-kernel. Im…

idea中maven全局配置

配置了就不需要每次創建項目都來設置maven倉庫了。 1.先把項目全關了 2. 進入全局設置 3.設置maven的倉庫就可以了

SpringBoot實現多數據源切換

1. 概述 隨著項目規模的擴大和業務需求的復雜化&#xff0c;單一數據源已經不能滿足實際開發中的需求。在許多情況下&#xff0c;我們需要同時操作多個數據庫&#xff0c;或者需要將不同類型的數據存儲在不同的數據庫中。這時&#xff0c;多數據源場景成為必不可少的解決方案。…

【CentOS7.6】docker部署EMQX教程,本地鏡像直接導入(附下載鏈接),沒法在云服務器上魔法拉取鏡像的快來

總覽 先把下載鏈接放在這里吧&#xff0c;這是 EMQX 的 tar 包&#xff0c;能夠直接導入 CentOS 的 docker&#xff1a; 鏈接&#xff1a;https://pan.baidu.com/s/1rSGSLoVvj83ai6d5oolg8Q?pwd0108 提取碼&#xff1a;0108 一、安裝配置教程 1.將 EMQX-latest.tar 包導入…

服務器重裝系統時數據丟失?有哪些方法可以避免

為了避免在服務器重裝系統時數據丟失&#xff0c;可以采取以下預防措施&#xff1a; 1. 數據備份&#xff1a;在重裝系統之前&#xff0c;備份所有重要的數據和配置文件。備份可以通過以下方式進行&#xff1a; - 使用外部存儲設備(如USB硬盤、NAS等)進行備份。 - 利用備份軟件…

學習成績總是上不去?中學生把握好這5個環節,助你提高成績

在中學時代&#xff0c;考試我們并不陌生。每隔一段時間&#xff0c;學校就會安排我們參加考試。學生時代&#xff0c;我們參加的考試有很多。對于中學生來說&#xff0c;考試成績是我們一直關心的事情。很多學生非常努力的學習&#xff0c;成績卻上不去。這是非常可惜的&#…

[圖解]企業應用架構模式2024新譯本講解19-數據映射器1

1 00:00:01,720 --> 00:00:03,950 下一個我們要講的就是 2 00:00:04,660 --> 00:00:07,420 數據映射器這個模式 3 00:00:09,760 --> 00:00:13,420 這個也是在數據源模式里面 4 00:00:13,430 --> 00:00:14,820 用得最廣泛的 5 00:00:16,250 --> 00:00:19,170…

【軟件工程中的噴泉模型及其優缺點】

文章目錄 一、噴泉模型是什么&#xff1f;二、噴泉模型的優點1. 靈活性和適應性2. 迭代開發3. 風險控制 三、噴泉模型的缺點1. 需求不明確性2. 可能造成資源浪費3. 需要良好的溝通與協作 一、噴泉模型是什么&#xff1f; 噴泉模型是一種迭代增量開發模型&#xff0c;其核心理念…

鏈篦機回轉窯球團生產工藝

生球在回轉窯氧化焙燒&#xff0c;回轉窯頭部設有燃燒器&#xff0c;燃料可以采用氣體、固體、液體。 來自環冷機一冷卻段的高溫廢氣作為二次風進入窯內參與燃燒&#xff0c;燒成成品球進入環冷機。 環冷機采用鼓風冷卻&#xff0c;熱風風箱分為四段&#xff1a; 一段氣體引至…