HashMap初始化容量為10,還未添加數據時,它的實際容量是多少?

在Java中,當使用?new HashMap<>(10)?初始化一個容量為10的?HashMap?但尚未添加任何數據時,其實際容量(底層數組的長度)不是10,而是16。原因如下:

關鍵機制解析:

  1. 容量必須是2的冪
    HashMap要求容量始終為2的整數次冪(如16、32等)。這是為了優化哈希計算(index = (n - 1) & hash)和擴容效率。

  2. 容量計算規則
    當傳入初始容量?initialCapacity?時,HashMap會通過?tableSizeFor()?方法計算大于等于該值的最小2的冪
    例如:

    • initialCapacity = 10?→ 實際容量 =?16

    • initialCapacity = 17?→ 實際容量 =?32

  3. 懶加載機制
    在創建HashMap對象時,底層數組并未立即分配內存。實際數組的初始化發生在第一次添加元素(put()操作)時。此時才會根據上述規則創建長度為16的數組。


驗證代碼示例:

import java.lang.reflect.Field;
import java.util.HashMap;public class HashMapCapacity {public static void main(String[] args) throws Exception {HashMap<Integer, String> map = new HashMap<>(10);// 反射獲取底層數組字段Field tableField = HashMap.class.getDeclaredField("table");tableField.setAccessible(true);// 未添加數據時數組為nullObject[] table = (Object[]) tableField.get(map);System.out.println("初始未添加數據時數組: " + table);  // 輸出: null// 添加一個元素觸發初始化map.put(1, "A");table = (Object[]) tableField.get(map);System.out.println("添加數據后數組長度: " + table.length);  // 輸出: 16}
}

輸出結果:

初始未添加數據時數組: null
添加數據后數組長度: 16

總結:

階段實際容量說明
初始化后(未添加數據)0底層數組尚未創建(table = null
首次添加數據后16底層數組初始化為大于10的最小2次冪

因此,雖然指定了初始容量為10,但HashMap的實際容量在首次添加數據時會被調整為16。這一設計既滿足了容量必須為2的冪的要求,又通過懶加載優化了內存使用。

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

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

相關文章

前端開發:CSS(2)—— 選擇器

前面我們初步學習了CSS&#xff0c;對其有了基本的認識。下面我們來具體學習CSS中的選擇器。 目錄 選擇器的種類 1.基礎選擇器 &#xff08;1&#xff09;標簽選擇器 &#xff08;2&#xff09;類選擇器 &#xff08;3&#xff09;id選擇器 &#xff08;4&#xff09;通…

人工智能2.0時代的人才培養和通識教育

目錄引言&#xff1a;從"機器模仿"到"智能協同"的時代跨越一、人工智能2.0的技術演進&#xff1a;從規則到大模型的三次躍遷1. 人工智能0.0&#xff08;1956-2006&#xff09;&#xff1a;規則驅動的"專家系統時代"2. 人工智能1.0&#xff08;20…

管理索引常用的API

二.管理索引常用的API 1.查看現有索引信息 查看所有索引信息列表&#xff1a;curl -X GET http://elk101.k8s.com:9200/_cat/indices?v查看某個索引的詳細信息:curl -x GET http://elk101.k8s.com:9200/linux-2020-10-2溫馨提示: (1)"?v"表示輸出表頭信息&#xff…

當文檔包含表格時,如何結合大模型和OCR提取數據?

在AI應用極速發展的當下&#xff0c;LLM&#xff08;大語言模型&#xff09;與RAG&#xff08;檢索增強生成&#xff09;系統已成為構建智能問答、知識管理等高階應用的核心引擎。 然而&#xff0c;許多團隊在項目落地時遭遇了現實的挑戰&#xff1a;模型的實際表現——無論是回…

機器學習工程化 3.0:從“實驗科學”到“持續交付”的 7 個關卡

一、背景&#xff1a;為什么 90% 的 ML 項目死在了實驗臺&#xff1f; Gartner 2024 報告顯示&#xff0c;87% 的企業機器學習項目未能走出實驗室。原因并非算法落后&#xff0c;而是缺少“工程化骨骼”&#xff1a;數據漂移無人發現&#xff0c;模型上線一周就失效&#xff1b…

BGP筆記整理

一、BGP 基礎概念1. 產生背景BGP&#xff08;Border Gateway Protocol&#xff09;是自治系統&#xff08;AS&#xff09;間的動態路由協議&#xff0c;屬于外部網關協議&#xff08;EGP&#xff09;&#xff0c;用于在不同 AS 之間傳遞路由信息。2. 自治系統&#xff08;AS&am…

Mysql-MVCC機制

1. MVCC機制詳解 在Read Uncommitted級別下&#xff0c;事務總是讀取到最新的數據&#xff0c;因此根本用不到歷史版本&#xff0c;所以MVCC不在該級別下工作。 在Serializable級別下&#xff0c;事務總是順序執行。寫會加寫鎖&#xff0c;讀會加讀鎖&#xff0c;完全用不到MVC…

MySQL面試題及詳細答案 155道(061-080)

《前后端面試題》專欄集合了前后端各個知識模塊的面試題&#xff0c;包括html&#xff0c;javascript&#xff0c;css&#xff0c;vue&#xff0c;react&#xff0c;java&#xff0c;Openlayers&#xff0c;leaflet&#xff0c;cesium&#xff0c;mapboxGL&#xff0c;threejs&…

大數據中需要知道的監控頁面端口號都有哪些

以下是一些大數據中常見組件監控頁面的端口號&#xff1a;1. Hadoop&#xff1a;HDFS Web UI在Hadoop2.x版本中默認端口為50070&#xff0c;在Hadoop3.x版本中為9870&#xff0c;用于查看集群文件及目錄&#xff1b;YARN Web UI端口為8088&#xff0c;可查看MR執行情況&…

時隔六年!OpenAI 首發 GPT-OSS 120B / 20B 開源模型:性能、安全與授權細節全解

為什么這次開放值得關注&#xff1f; OpenAI 時隔六年再次“放權重”&#xff0c;一次性公布 gpt-oss-120b 與 gpt-oss-20b 兩個尺寸&#xff0c;并允許商業化二次開發 —— 采用 Apache 2.0 許可且可直接在 Hugging Face 下載(WIRED)。官方表示&#xff0c;開放旨在 降低門檻…

漏洞全講解之中間件與框架漏洞(數字基礎設施的“阿喀琉斯之踵“)

一、中間件漏洞的嚴峻現狀根據Synopsys《2023年開源安全報告》顯示&#xff1a;企業應用中平均包含158個中間件依賴高危漏洞年增長率達62%&#xff08;X-Force數據&#xff09;最危險漏洞&#xff1a;Log4j2&#xff08;CVE-2021-44228&#xff09;影響全球83%企業平均修復延遲…

Leetcode——菜鳥筆記2(移動0)

文章目錄題目解題題目 解題 /*nums【0&#xff0c;1&#xff0c;0&#xff0c;3&#xff0c;2】numsSize5 nums【1.3.2.0.0】 1.找非零數&#xff0c;依次放在前面 2.剩下補0 */ void moveZeroes(int* nums, int numsSize) {int count0 0;int temp 0;for (int i 0; i < …

【LINUX網絡】應用層自定義協議與序列化——通過實現一個簡單的網絡計算器來體會自定義協議

在了解了各種協議的使用以及簡單的socket接口后&#xff0c;學會了“怎么傳”的問題&#xff0c;現在來了解一下“傳什么”的問題。 1. 序列化與反序列化 在前面的TCP、UDP的socket api 的接口, 在讀寫數據時, 都是按 "字符串" 的方式來發送接收的. 如果我們要傳輸一…

電腦一鍵重裝系統win7/win10/win11無需U盤(無任何捆綁軟件圖文教程)

建議還是使用U盤進行重裝系統&#xff0c;如果暫時還不會沒有U盤&#xff0c;那就按照我這個來吧。 一&#xff0c;工具下載&#xff1a; 一鍵重裝工具 密碼:g5p3 二&#xff0c;鏡像下載: 鏡像站點&#xff1a;MSDN, 我告訴你 - 做一個安靜的工具站 可以下載需要重裝的系統…

深入探索Supervision庫:Python中的AI視覺助手

深入探索Supervision庫&#xff1a;Python中的AI視覺助手 在計算機視覺和機器學習領域&#xff0c;數據處理和結果可視化是項目成功的關鍵環節。今天我們將深入探討一個強大的Python庫——Supervision&#xff0c;它專為簡化AI視覺項目的工作流程而設計。 什么是Supervision&am…

面向對象之類、繼承和多態

系統是由匯總了數據和過程的“對象”組成的。在面向對象中&#xff0c;軟件被定義為“類”&#xff0c;然后創建“實例”并運行。系統是通過“實例”之間的互相交換“消息”而運行的&#xff0c;但由于進行了“封裝”&#xff0c;所以無法查看內部的詳細內容&#xff0c;這被稱…

傳統防火墻與下一代防火墻

防火墻的發展過程第一種簡單包過濾防火墻工作于&#xff1a;3、4層實現了對于IP、UDP、TCP信息的一些檢查優點&#xff1a;速度快、性能高、可用硬件實現&#xff1b;兼容性較好檢查IP、UDP、TCP信息缺點&#xff1a;安全性有限&#xff1a;僅能基于數據包的表面層面進行審查&a…

計算機視覺前言-----OpenCV庫介紹與計算機視覺入門準備

前言&#xff1a;OpenCV庫介紹與計算機視覺入門 OpenCV概述 OpenCV&#xff08;Open Source Computer Vision Library&#xff09;是一個開源的計算機視覺和機器學習軟件庫&#xff0c;由Intel于1999年首次發布&#xff0c;現由非盈利組織OpenCV.org維護。它包含了超過2500種…

AI面試系統助手深度評測:6大主流工具對比分析

導語&#xff1a;秋招季&#xff0c;企業如何破局高效招聘&#xff1f;隨著2024年秋招季臨近&#xff0c;企業招聘壓力陡增。據牛客調研數據顯示&#xff0c;74.2%的求職者已接觸過AI面試&#xff0c;89.2%的企業認為AI顯著提升了篩選效率。然而&#xff0c;面對市場上琳瑯滿目…

浮雕軟件Artcam安裝包百度云網盤下載與安裝指南

如你所知&#xff0c;ArtCAM是一款專業的CAD/CAM軟件工具&#xff0c;主要用于三維浮雕設計、珠寶加工及CNC數控雕刻&#xff0c;可將二維構思快速轉化為三維藝術產品&#xff0c;深受使用者的喜愛。一、主要應用領域?工藝品與制造業?&#xff1a;木工雕花、標牌制作、模具制…