首页
/
每日頭條
/
生活
/
hashmap 定義并初始化
hashmap 定義并初始化
更新时间:2026-02-18 15:13:04

hashmap的優化點,創建HashMap時,如果已經知道大概要放多少的數據量,可以自己設置好長度,減少擴容,提高速度。代碼比較,存放3個數。不設置初始化大小

private static void test1(){ long l1 = System.nanoTime(); Map<String,String> dataMap = new HashMap<>(); dataMap.put("1", "A"); dataMap.put("2", "B"); dataMap.put("3", "C"); long l2 = System.nanoTime(); System.out.println("花費時間納秒:" (l2-l1)); }

設置初始化大小

private static void test2(){ long l1 = System.nanoTime(); Map<String,String> dataMap = new HashMap<>(8); dataMap.put("1", "A"); dataMap.put("2", "B"); dataMap.put("3", "C"); long l2 = System.nanoTime(); System.out.println("花費時間納秒:" (l2-l1)); }

查看兩者的時間差,單位是納秒

hashmap 定義并初始化(HashMap初始化長度設置大小)1

多次運行結果,發現設置了長度時,花費的時間短了許多,大概是不設置的1/3存放10萬條數據比較二者耗時,大概是不設置長度的時間的一半

hashmap 定義并初始化(HashMap初始化長度設置大小)2

那麼有個問題了,如果創建HashMap是,傳了長度參數5?那它的長度就是5麼?,首先看下一下HashMap的構造函數

hashmap 定義并初始化(HashMap初始化長度設置大小)3

可以看到有3個構造方法,無參構造函數,我們知道默認的長度是16

/** * The default initial capacity - MUST be a power of two. * 默認初始容量-必須是2的幂。 */ static final int DEFAULT_INITIAL_CAPACITY = 1 << 4; // aka 16

隻有一個參數的就是可以自定義初始map的長度,若果我們傳的參數是5,那麼map的長度就是5嗎?

答案是NO,記着看這句話,默認初始容量-必須是2的幂。如果傳的參數是5,hashmap底層會自動幫我們優化成比5大的2的倍數的最小值,也就是2的3次方8。源碼如下

hashmap 定義并初始化(HashMap初始化長度設置大小)4

hashmap 定義并初始化(HashMap初始化長度設置大小)5

Returns a power of two size for the given target capacity.

,
Comments
Welcome to tft每日頭條 comments! Please keep conversations courteous and on-topic. To fosterproductive and respectful conversations, you may see comments from our Community Managers.
Sign up to post
Sort by
Show More Comments
推荐阅读
什麼時候喝咖啡
什麼時候喝咖啡
什麼時候喝咖啡?早上喝咖啡:可以改善便秘,可是這種功用,早上喝咖啡會特别顯著,但其他時間飲用效果不大,下面我們就來聊聊關于什麼時候喝咖啡?接下來我們就一起去了解一下吧!什麼時候喝咖啡早上喝咖啡:可以改善便秘,可是這種功用,早上喝咖啡會特别顯...
2026-02-18
夢見出殡的場面和棺材
夢見出殡的場面和棺材
夢見出殡的場面和棺材?夢見出殡的場面和棺材:預示着你近期的運勢很好,遇到解決不了的困難,有好心人出手幫助自己,下面我們就來聊聊關于夢見出殡的場面和棺材?接下來我們就一起去了解一下吧!夢見出殡的場面和棺材夢見出殡的場面和棺材:預示着你近期的運...
2026-02-18
淡斑護膚品真的能淡化雀斑嗎
淡斑護膚品真的能淡化雀斑嗎
我們的色斑都是黑色素的沉澱造成的,黑色素是因為肌膚中的硌氨酸和硌氨酸酶的結合,人體黑色素的合成離不開酪氨酸和酪氨酸酶,兩者缺一就不能合成黑色素,皮膚就會白變。色斑其實就是酪氨酸酶在黑色素細胞内過氧化反應的産物。酪氨酸是從食物中攝取的,酪氨酸...
2026-02-18
考駕照考場需要什麼
考駕照考場需要什麼
考駕照考場需要什麼?需要身份證原件和複印件,複印件一般是要求雙面複印在一張紙上有些駕校報名處是可以提供打印服務的建議提前準備好,現在小編就來說說關于考駕照考場需要什麼?下面内容希望能幫助到你,我們來一起看看吧!考駕照考場需要什麼需要身份證原...
2026-02-18
京東家電專賣店理念
京東家電專賣店理念
大材研究,泛家居老闆經營内參,經理人每日讀物,經銷商店長生意參謀,導購實用攻略家居家電一體化的版圖上,又有一家實力派露面。12月31日,麗維家南京旗艦店開業,作為定制家居品牌,這次并沒有選址在家居商場,而是南京的京東電器金箔路店。與此同時,...
2026-02-18
Copyright 2023-2026 - www.tftnews.com All Rights Reserved