国徽,兽兽大乱斗2.9,癞蛤蟆有毒吗
今天读jdk8 hashmap源码,构造函数中 根据initialcapacity初始化threshold
public hashmap(int initialcapacity, float loadfactor) {
if (initialcapacity < 0)
throw new illegalargumentexception("illegal initial capacity: " +
initialcapacity);
if (initialcapacity > maximum_capacity)
initialcapacity = maximum_capacity;
if (loadfactor <= 0 || float.isnan(loadfactor))
throw new illegalargumentexception("illegal load factor: " +
loadfactor);
this.loadfactor = loadfactor;
this.threshold = tablesizefor(initialcapacity);//大于initialcapacity的最小的2的幂
}
其中tablesizefor 函数看的一脸懵,记录一下
/** * returns a power of two size for the given target capacity. * 取大于capacity的最小的2的幂 */ static final int tablesizefor(int cap) { int n = cap - 1;//防止cap正好是2的幂的情况下扩大cap,进行cap<<1的情况 n |= n >>> 1;//保证n的高位前2位全是1(如果n的第一个1出现在大于第1位的位置,最低位是第0位) n |= n >>> 2;//保证n的高位前4位全是1(如果n的第一个1出现在大于第3位的位置) n |= n >>> 4;//保证n的高位前8位全是1(如果n的第一个1出现在大于第7位的位置) n |= n >>> 8;//保证n的高位前16位全是1(如果n的第一个1出现在大于第15位的位置) n |= n >>> 16;//保证n的高位前32位全是1(如果n的第一个1出现在大于第31位的位置) /** * 经过或运算后 n是低位全是1的值(如0000 0001 1111 1111),n+1后变成高位进1,低位全是0(0000 0010 0000 0000),正好是2的幂 */ return (n < 0) ? 1 : (n >= maximum_capacity) ? maximum_capacity : n + 1; }
如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复
浅析我对 String、StringBuilder、StringBuffer 的理解
使用IDEA搭建SSM框架的详细教程(spring + springMVC +MyBatis)
Springboot整合freemarker 404问题解决方案
引入mybatis-plus报 Invalid bound statement错误问题的解决方法
网友评论