hashMap初始化容量设置不当
2020-09-29 本文已影响0人
不二不二熊
不要设置hashMap的capacity为expectedSize,例如以下写法是错误的:
Map<String,String> map = new HashMap<String,String>(3);
hashMap在达到总容量的0.75
时会进行扩容,如果你不知道如何设置,请使用guava的API:
Maps.newHashMapWithExpectedSize(int expectedSize);
摘取了其中的默认实现:
static int capacity(int expectedSize) {
if (expectedSize < 3) {
CollectPreconditions.checkNonnegative(expectedSize, "expectedSize");
return expectedSize + 1;
} else {
return expectedSize < 1073741824 ? (int)((float)expectedSize / 0.75F + 1.0F) : 2147483647;
}
}
因此,如果你不想引入guavaAPI,请使用 expectedSize / 0.75 + 1.0
来进行计算。