了解 HashMap#resize 函数细节

的关键点resize是重新计算newCap和newThr。然而,在源代码中,有两种不同的计算方式newThr。


首先,当


oldCap > DEFAULT_INITIAL_CAPACITY && 

oldCap < MAXIMUM_CAPACITY && 

newCap = < MAXIMUM_CAPACITY

发生时,它使用:


// double the old threshold

newThr = oldThr << 1; 

第二


// newCap * load factor

newThr = (newCap < MAXIMUM_CAPACITY && ft < (float)MAXIMUM_CAPACITY ?

                  (int)ft : Integer.MAX_VALUE);

为什么我们需要两种不同的方法?第一个条件是什么意思?


HUWWW
浏览 68回答 1
1回答

泛舟湖上清波郎朗

本质上,如果旧阈值非零,则新阈值将设置为其大小的两倍。否则,如果旧阈值为零(无论这意味着什么,在代码摘录中不可见),我们需要其他方法来计算新阈值,因此我们进行第二次计算。就那么简单?
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java