hashmap有擴容機制,就是當達到擴容條件時會進行擴容。hashmap的擴容條件就是當hashmap中的元素個數(size)超過臨界值(threshold)時就會自動擴容。在hashmap中,threshold = loadfactor * capacity。
所以,如果我們沒有設定初始容量大小,隨著元素的不斷增加,hashmap會發生多次擴容,而hashmap中的擴容機制決定了每次擴容都需要重建hash表,是非常影響效能的。
話不多說上**:
需要迴圈10000次,同時往map中插入一萬條鍵和值。如果初始化大小為16的話,那麼需要擴容6250次,耗時為12毫秒。
相對應的如果一開始就就初始化大小為100000的話,就不需要擴容了,耗時為5毫秒。
public
static
void
main
(string[
] args)
system.out.
println
("指定大小16耗時為:"
+(system.
currenttimemillis()
- start));
mapmap02 =
newhashmap
<
>
(100000);
start = system.
currenttimemillis()
;for
(int i =
0; i <
100000
; i++
) system.out.
println
("指定大小200耗時為:"
+(system.
currenttimemillis()
- start));
}
**執行結果為:
結論:在編寫**時還是盡量給出初始化值,當然如果不給出初始化值的話,預設的大小為16.
HashMap為什麼樹化
在jdk1.8中,hashmap做了一些改變 jdk1.7中,發生雜湊碰撞時,將鍵值對新增到鍊錶頭部,jdk1.8是將鍵值對新增到鍊錶尾部。jdk1.8中,如果鍊錶的長度超過8,將會將鍊錶轉化為紅黑樹。容量的初始化 jdk1.7的hashmap在構造時會對容量進行初始化,而jdk1.8是在首次向ha...
使用SqlParameter時引數為什麼要設定長度
sqlparameter的作用是用來傳參,以及防止sql語句注入的。以前在連線資料庫時,我都是像這樣做的。new sqlparameter name name d層 public class dao public datatable selectbyname string name dt sqlhe...
為什麼需要PKI
為什麼需要pki 隨著電子商務的迅速發展,資訊保安已成為焦點問題之一,尤其是網上支付和網路銀行對資訊保安的要求顯得更為突出。為了能在網際網路上開展安全的電子商務活動,公開金鑰基礎設施 pki,public key infrastructure 逐步在國內外得到廣泛應用。我們是否真的需要pki,pki...