只有一個(gè)元素的Map為什么要new HashMap<String, Object>(1, 1.f)?

有時(shí)候我們需要一個(gè)只放一個(gè)元素的Map。
可能一開始是這樣的

var map = new HashMap<String, Object>(1);

上面這種寫法相當(dāng)于

var map = new HashMap<String, Object>(1, 0.75f);

這樣會(huì)導(dǎo)致什么呢?
我們知道 threshold = capacity * loadFactor
看HashMap中的resize方法的這段代碼

        if (newThr == 0) {
            float ft = (float)newCap * loadFactor;
            newThr = (newCap < MAXIMUM_CAPACITY && ft < (float)MAXIMUM_CAPACITY ?
                      (int)ft : Integer.MAX_VALUE);
        }
        threshold = newThr;

所以上面這種寫法,在putVal開始的時(shí)候會(huì)調(diào)用resize(),導(dǎo)致threshold ==0(1*0.75強(qiáng)轉(zhuǎn)int),然后在putVal的結(jié)束的時(shí)候

if (++size > threshold)
            resize();

1 > 0 ,所以會(huì)再次調(diào)用resize(),這樣Map的這個(gè)table長(zhǎng)度就變成2了,但是Map此時(shí)是只有一個(gè)元素的

但是,用這種方式就沒(méi)問(wèn)題了

var map = new HashMap<String, Object>(1, 1.f);

當(dāng)然,有時(shí)候可以用Collections.singletonMap(一個(gè)不可變的Map,只包含一個(gè)Key和一個(gè)Value)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容