首页
/
每日頭條
/
生活
/
hashmap 定義并初始化
hashmap 定義并初始化
更新时间:2026-03-26 00:42:53

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
推荐阅读
企業微信的基本功能
企業微信的基本功能
微信公衆号分為訂閱号,服務号,企業号還有小程序。下面主要說服務号和訂閱号。服務号的功能公衆平台服務号,是公衆平台的一種帳号類型,旨在為用戶提供服務。如:招商銀行、中國南方航空。1、1個月(30天)内僅可以發送1條群發消息。2、發給訂閱用戶(...
2026-03-26
為什麼錄音聽自己的聲音很難聽
為什麼錄音聽自己的聲音很難聽
聲音是一個人除了外表以外,最重要的一個外在特征,因為我們除了經常以面示人、以貌取人之外,一個渾厚、磁性、帶有感染力的聲音也會讓人覺得你很有魅力、很有安全感,這就是為什麼很多網絡上的小姐姐說:有沒有聲音好聽的小哥哥聊天啊!每當聽到、看到這話,...
2026-03-26
糖分低的番薯
糖分低的番薯
糖分低的番薯?早餐吃番薯,營養又健康,不必擔心血糖出問題,我來為大家科普一下關于糖分低的番薯?以下内容希望對你有幫助!糖分低的番薯早餐吃番薯,營養又健康,不必擔心血糖出問題。孫先生最愛吃番薯,每天都會吃兩三個,通常連皮一起吃。但有一天朋友提...
2026-03-26
張起靈的驚天身世藏海花
張起靈的驚天身世藏海花
張起靈的驚天身世藏海花?“張起靈”不僅是個名字,且是張家裡的一個相當于族長地位的稱号,每一任“族長”都是張起靈他們不光有着特殊的血液,而且身上都有麒麟紋身壽命也都較為長壽,張家是禁止族外通婚的,也是為了保證基因的純正,這也就先生了副作用-失...
2026-03-26
折柳送别的習俗最早出現
折柳送别的習俗最早出現
“桃花潭水深千尺,不及汪倫送我情。”這句李白所寫的《贈汪倫》,在我上學前班的時候就學習過了。不過對于這種友人之間的依依惜别之情,當時的我其實并不是十分理解。而随着年紀的增長,經曆過離别之後,也就慢慢能夠體會到始終描述的友人之間離别之際的那種...
2026-03-26
Copyright 2023-2026 - www.tftnews.com All Rights Reserved