首页
/
每日頭條
/
生活
/
hashmap 定義并初始化
hashmap 定義并初始化
更新时间:2025-01-24 00:22:24

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
推荐阅读
麻雀吃什麼
麻雀吃什麼
麻雀吃什麼?麻雀是一種雜食性鳥類,雛期主要以為害禾本科植物的昆蟲為主食,其中多為鱗翅目害蟲;成鳥冬季和早春以雜草種子和野生禾本科植物的種子為食,也吃人類扔棄的各種食物,夏、秋主要以禾本科植物種子為食,下面我們就來聊聊關于麻雀吃什麼?接下來我...
2025-01-24
冷凍披薩怎麼制作
冷凍披薩怎麼制作
冷凍披薩怎麼制作?先來做一個披薩皮,材料:中粉400g,溫水或者牛奶200ml,糖10g,鹽4g,黃油40g,酵母5g,我來為大家講解一下關于冷凍披薩怎麼制作?跟着小編一起來看一看吧!冷凍披薩怎麼制作先來做一個披薩皮,材料:中粉400g,溫...
2025-01-24
穿越時空感受兵馬俑
穿越時空感受兵馬俑
文\??刊特約撰稿麥青國産動漫電影燃爆暑期檔,似乎是近年來的規律。今年的國漫爆款,又會花落誰家?近日上映的國産動漫電影《俑之城》搶占先機,率先拉開了今年暑期檔國漫大戰的序幕。在中國的動畫藝術長廊裡,孫悟空領銜的天宮傳奇故事一直備受喜愛。五十...
2025-01-24
江蘇有哪些市
江蘇有哪些市
江蘇有哪些市?江蘇省的地級市有13個,分别是常州市、徐州市、南京市、淮安市、南通市、宿遷市、無錫市、揚州市、鹽城市、蘇州市、泰州市、鎮江市、連雲港市,接下來我們就來聊聊關于江蘇有哪些市?以下内容大家不妨參考一二希望能幫到您!江蘇有哪些市江蘇...
2025-01-24
英偉達rtx 30系顯卡
英偉達rtx 30系顯卡
點擊右上角關注我們,每天給您帶來最新最潮的科技資訊,讓您足不出戶也知道科技圈大事!老黃此前發布了RTX3070、RTX3080以及RTX3090,當時官方表示RTX3070比RTX2080Ti的性能還要高。根據目前已經開賣的RTX3080來...
2025-01-24
Copyright 2023-2025 - www.tftnews.com All Rights Reserved