今天在對(duì)map進(jìn)行初始化時(shí)蠢挡,查詢到一種新的初始化的方法因此做次記錄。
第一種:
平常常用的一種先new一個(gè)map,再調(diào)用map對(duì)象的put方法依次添加映射關(guān)系
Map<String,Integer> skuLimitRate = new HashMap<String,Integer>();
skuLimitRate,put("String1",1);
skuLimitRate.put("String2",2);
第二種
使用雙花括號(hào)的形式捅彻,這種形式感覺(jué)有一定程度上是類似于lambo表達(dá)式寺旺,但是又不一樣
Map<String,Integer> skuLimitRate = new HashMap<String,Integer>(){
{
put("String1",1);
put("String2",2);
}
}
從網(wǎng)上查看到有大佬對(duì)這兩種put優(yōu)劣的一種分析:
優(yōu)勢(shì) 學(xué)名叫雙花括號(hào)爷抓。雙花括號(hào)是節(jié)省效率的,MAP 自增機(jī)制對(duì)效率的影響尤為重要阻塑,以 HashMap 為例蓝撇,初始默認(rèn)空間為 16,每次自增為其兩倍陈莽,就是 16渤昌、32、64走搁、128独柑、256...,當(dāng)所用空間較少時(shí)私植,MAP 需頻繁的自我復(fù)制來(lái)進(jìn)行自增忌栅。當(dāng)使用雙花括號(hào),取 MAP 某個(gè)較大的自增臨界點(diǎn)進(jìn)行測(cè)試時(shí)曲稼,會(huì)發(fā)現(xiàn)在自增前使用 put 方法索绪,效率比在雙花括號(hào)外 put 快 1/3 左走,但當(dāng)空間增加到觸發(fā)自增時(shí)贫悄,由雙花括號(hào)內(nèi)觸發(fā)的自增效率瑞驱,比雙花括號(hào)內(nèi)觸發(fā)的自增要慢很多很多。當(dāng)所用空間較少窄坦,MAP 頻繁自增唤反,由雙花括號(hào)內(nèi)觸發(fā)的自增,損耗性能較大鸭津,當(dāng)所用空間越來(lái)越多拴袭,雙花括號(hào)內(nèi)使用 put 方法,節(jié)省性能越多曙博。若使用雙花括號(hào)當(dāng)自增達(dá)到某一臨界值時(shí),put 所節(jié)省的性能便會(huì)遠(yuǎn)遠(yuǎn)大于自增所消耗的性能怜瞒,當(dāng)然這個(gè)臨界值會(huì)很大(本人曾經(jīng)測(cè)到過(guò) put 到九千萬(wàn)父泳,性能波動(dòng)情況類似于一個(gè)在 X 軸上下波動(dòng),整體 Y 值趨勢(shì)于負(fù)增長(zhǎng)的二次元函數(shù))吴汪,所以當(dāng)所占空間較少時(shí)惠窄,使用帶有自我復(fù)制進(jìn)行自增的集合來(lái)測(cè)試雙花括號(hào)是不準(zhǔn)確的。您若用真實(shí)實(shí)體對(duì)象就輕松多了漾橙,實(shí)體對(duì)象在 JDK12 下使用雙花括號(hào)設(shè)置屬性杆融,會(huì)提升 1/3 的效率。詳細(xì)原因可以查看 JVM 原理霜运。