/**
* 获取大于等于cap的最小2次方数
*
* @param cap
* @return
*/
private static int tableSizeFor(int cap) {
int n = cap - 1;
n |= n >>> 1;
n |= n >>> 2;
n |= n >>> 4;
n |= n >>> 8;
n |= n >>> 16;
return (n < 0) ? 1 : (n >= MAXIMUM_CAPACITY) ? MAXIMUM_CAPACITY : n + 1;
}
/**
* 计算map最大不用扩容的siz大小
*
* @param cap
* @return
*/
private static int calculateMapSize(int cap) {
int maxTableSize = tableSizeFor(cap);
float size = (float) maxTableSize * 0.75f;
if (size < cap) {
maxTableSize = maxTableSize << 1;
}
if (maxTableSize > MAXIMUM_CAPACITY) {
maxTableSize = MAXIMUM_CAPACITY;
}
System.out.println("map容量为:" + maxTableSize);
return maxTableSize;
}
如何设置HashMap合适的容量大小,避免重复扩容操作
于 2021-12-26 00:52:23 首次发布
本文介绍了如何使用算法计算一个map在不频繁扩容的前提下,能够容纳数据的最大初始大小。通过位操作技巧减少计算步骤,确保内存效率。关键步骤包括获取大于等于cap的最小2次方数和动态调整最大容量。
1518

被折叠的 条评论
为什么被折叠?



