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

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-04-06
各種花的開花時間
各種花的開花時間
各種花的開花時間?蛇麻花:淩晨3時左右開花,牽牛花(紫色的小喇叭):清晨4時吹起;,下面我們就來聊聊關于各種花的開花時間?接下來我們就一起去了解一下吧!各種花的開花時間蛇麻花:淩晨3時左右開花,牽牛花(紫色的小喇叭):清晨4時吹起;栀子花:...
2026-04-06
如果你被最親近的人抛棄了
如果你被最親近的人抛棄了
如果你被最親近的人抛棄了?以後,我隻會對兩種人好一種是對我好的人,一種是懂得我好的人一個人的溫暖是有限度的,一點都不能浪費,我來為大家科普一下關于如果你被最親近的人抛棄了?下面希望有你要的答案,我們一起來看看吧!如果你被最親近的人抛棄了以後...
2026-04-06
古爾邦節和開齋節之間的區别
古爾邦節和開齋節之間的區别
古爾邦節和開齋節之間的區别?開齋節是回族、維吾爾族、哈薩克族、烏孜别克族、塔吉克族、塔塔爾族、柯爾克孜族、撒拉族、東鄉族、保安族等少數民族共同歡度的節日,也是我國回族人民的年節時間是伊斯教曆的十月初開齋節是某宗教的珍貴日子節日裡,每個教徒都...
2026-04-06
小度越來越卡怎麼辦
小度越來越卡怎麼辦
小度越來越卡怎麼辦?需要檢查一下網絡自身的問題就是網絡運營商提供給我們的網絡是多大寬帶如果确實帶寬很小,那就是沒辦法了處理方法:找運營商提升帶寬以解決實際網速問題,下面我們就來聊聊關于小度越來越卡怎麼辦?接下來我們就一起去了解一下吧!小度越...
2026-04-06
Copyright 2023-2026 - www.tftnews.com All Rights Reserved