首页
/
每日頭條
/
生活
/
hashmap 定義并初始化
hashmap 定義并初始化
更新时间:2026-02-28 12:52:50

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-28
帶福字的拜年祝福語
帶福字的拜年祝福語
帶福字的拜年祝福語?新年到,祝你合家幸福在新的一年裡好事多多笑容多多開心每一秒,快樂每一天,幸福每一年,健康到永遠新年快樂,現在小編就來說說關于帶福字的拜年祝福語?下面内容希望能幫助到你,我們來一起看看吧!帶福字的拜年祝福語新年到,祝你合家...
2026-02-28
有機矽助劑的使用
有機矽助劑的使用
農藥對于減少農作物蟲害、增加農作物産量具有十分重要的意義,但也存在以下兩個問題。一是經濟成本問題:農藥生産成本較高,價格也就較貴,大量農藥的使用,使農業成本大幅度增加,農民的收入降低。二是環境污染及農藥殘留量對人體的影響問題:農藥殺滅害蟲時...
2026-02-28
留聲機是誰發明的
留聲機是誰發明的
留聲機是誰發明的?托馬斯·阿爾瓦·愛迪生(ThomasAlvaEdison,1847年2月11日—1931年10月18日),出生于美國俄亥俄州米蘭鎮,逝世于美國新澤西州西奧蘭治發明家、企業家,接下來我們就來聊聊關于留聲機是誰發明的?以下内容...
2026-02-28
永遠不要忘記自己忠于的是什麼
永遠不要忘記自己忠于的是什麼
某個瞬間,你是否也突然發現了一個真相。可能是因為某件事,也可能是因為某個人。我們接觸過很多事,這些事如漫天星辰一般,複雜且無窮無盡。我隻能記得記憶深刻的東西,有好的也有壞的,就好像我隻是一個過客,經曆了便隻能朝前走了。自己想要正經的生活,一...
2026-02-28
Copyright 2023-2026 - www.tftnews.com All Rights Reserved