hashMap使用中的效能提高

2021-06-16 14:54:31 字數 862 閱讀 1975

當你要建立乙個比較大的hashmap時,充分利用另乙個建構函式

public hashmap(int initialcapacity, float loadfactor)

initialcapacity:初始容量 和loadfactor:

載入因子。容量 是雜湊表中桶的數量,初始容量只是雜湊表在建立時的容量。載入因子 是雜湊表在其容量自動增加之前可以達到多滿的一種尺度。當雜湊表中的條目數超出了載入因子與當前容量的乘積時,通過呼叫 rehash 方法將容量翻倍。 

應該避免hashmap多次進行了hash重構,擴容是一件很耗費效能的事,在預設中initialcapacity只有16,而loadfactor是 0.75,需要多大的容量,你最好能準確的估計你所需要的最佳大小,同樣的hashtable,vectors也是一樣的道理。

如果我們的對hashmap的容量需求不是很大,你給它乙個預設1w的容量,顯然又浪費寶貴的空間了。至於這兩個引數的選擇可以自己去把握,甚至可以設定動態繫結:分析歷史資料,找出規律,或者**未來的走向找出規律。對hashmap這兩個引數實現乙個動態的調整。比如早上8點~9點a業務比較忙,它對應的hashmap可以提前多給些空間,而10點以後b業務使用的hashmap比較忙,a相對清閒,可以縮減a的空間給b。

如果從資料庫的表中讀取記錄存入hashmap中,完全可以根據記錄的行數(row size)來初始化hashmap的容量,這樣就可以達到rehash的最少次數,同時也保證了hashmap所需的最小容量:

比如:通過sql語句: select count(字段) as rowsize from 表

提到行數: rowsize = 30

那麼我們在定義hashmap的時候:hashmaph = new hashmap(rowsize,1f);

c 中hash map的使用

本人是極簡主義者,直奔主題。概念 hash map是用來儲存key value鍵值對的集合,每乙個鍵值對是乙個entry,這些entry分散儲存在乙個陣列中 核心技術 直接存址和解決衝突 儲存結構 分散的桶結構,每個桶節點中同時可以存放乙個單鏈表 該鍊錶使用頭插法生成,主要是為了解決雜湊衝突 的問題...

影響hashMap效能的因素

首 先算得key得hashcode值,然後跟陣列的長度 1做一次 與 運算 看上去很簡單,其實比較有玄機。比如陣列的長度是2的4次方,那麼hashcode就會和2的4次方 1做 與 運算。很多人都有這個疑問,為什麼hashmap的陣列初始化大小都是2的次方大小時,hashmap 的效率最高,我以2的...

HashSet和HashMap的效能選項

對於hashset及其子類而言,它們採用hash演算法來決定集合中元素的儲存位置,並通過hash演算法來控制集合的大小 對於hashmap hashtable及其子類而言,它們採用hash演算法來覺得map中key的儲存,並通過hash演算法來增加key集合的大小。hash表裡可以儲存元素的位置被稱...