HashMap源码:构造函数

HashMap的构造函数详细解读,包括默认构造、指定初始容量和负载因子的情况。初始化过程中,HashMap会设置默认负载因子和阈值,并确保容量为2的幂。tableSizeFor方法通过位运算找到大于给定容量的最接近2的n次方的值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

构造函数:

public HashMap() {

this.loadFactor = DEFAULT_LOAD_FACTOR; // all other fields defaulted

}

public HashMap(int initialCapacity) {

this(initialCapacity, DEFAULT_LOAD_FACTOR);

}

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);

}

默认是使用 HashMap这个构造函数的,当初始化一个构造函数的时候,HashMap内部是默认初始化了HapMap里面的默认负载因子,默认的初始容量 16;

如果自定义了负载因子以及初始容量,在初始化的时候会判断负载因子以及初始化的容量是否大于最大的容量以及最小是否小于0。然后调用初始化容量,存入最接近2的n次方的整数,最后初始化threshold 阈值

/**

* Returns a power of two size for the given target capacity.

*/

static final 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;

}

n |= n >>> 1; 这个是把n变为n与n右移一位之后或等于后的值

|= 的含义:

两个二进制对应位为0时该位为0,否则为1。拿5的二进制 0000 0101 和 3的二进制 0000 0011 进行|运算,后三位的的对应位都不是同时等于0,所以最终结果为 0000 0111 也就是7的二进制。

tableSizeFor 这个方法就是返回 大于传入的cap值之后,返回最接近2的n次方的数;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值