admin 管理员组文章数量: 1086019
2024年3月13日发(作者:sql计算今天是今年的第几天)
hashmap构造函数
HashMap是Java中常用的数据结构之一,它可以存储键值对,并且能够根据键快速查
找对应的值。HashMap的实现基于哈希表,它通过哈希函数将键映射到数组的索引位置,
从而实现快速的查找和操作。
HashMap的构造函数有多个重载形式,不同的构造函数实现了不同的初始化方法。下
面将详细介绍各个构造函数的实现原理和使用方式,帮助读者更好地理解HashMap的内部
实现和使用方法。
1. HashMap()
HashMap()是HashMap类的默认构造函数,在创建HashMap对象时会被调用。该构造函
数会默认为HashMap对象分配一个大小为16的数组,同时将装载因子(load factor)设
置为0.75。装载因子表示哈希表在数据存储量达到数组容量的75%时会自动扩容。
具体代码实现如下:
```java
public HashMap() {
ctor = DEFAULT_LOAD_FACTOR; // 设置装载因子为0.75
}
2. HashMap(int initialCapacity)
public HashMap(int initialCapacity, float loadFactor) {
if (initialCapacity < 0)
throw new IllegalArgumentException("Illegal initial capacity: " +
initialCapacity);
if (initialCapacity > MAXIMUM_CAPACITY)
initialCapacity = MAXIMUM_CAPACITY; // 将初始容量限制在
MAXIMUM_CAPACITY以内
ctor = loadFactor; // 设置装载因子
old = tableSizeFor(initialCapacity); // 计算哈希表的阈值
}
/**
* 返回大于等于initialCapacity的最小的2的幂次方
*/
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;
}
static final int MAXIMUM_CAPACITY = 1 << 30; // 哈希表的最大容量
```
HashMap(int initialCapacity, float loadFactor)也是HashMap类的带参数构造函
数,用于同时指定HashMap对象的初始化容量和装载因子。在该构造函数中会进行各种参
数的检查和计算,确保HashMap对象的正常创建。
该构造函数的具体代码实现见上一节。
4. HashMap(Map extends K, ? extends V> m)
HashMap(Map extends K, ? extends V> m)是HashMap类的拷贝构造函数,用于创
建一个新的HashMap对象,并将参数m中的所有键值对拷贝到新的HashMap对象中。该构
造函数中会先调用HashMap()构造函数创建一个默认大小的HashMap对象,然后调用
putAll方法将参数m中的所有键值对添加到新的HashMap对象中。
// 创建默认大小的HashMap对象
old = DEFAULT_INITIAL_CAPACITY;
init();
putMapEntries(m);
}
final void putMapEntries(Map extends K, ? extends V> m) {
int s = ();
if (s > 0) {
// 调整哈希表的容量和阈值
if (table == null) {
// 如果哈希表未初始化
float ft = ((float) s / loadFactor) + 1.0F;
int t = ((ft < (float) MAXIMUM_CAPACITY) ?
(int) ft : MAXIMUM_CAPACITY);
if (t > threshold)
threshold = tableSizeFor(t);
} else if (s > threshold)
// 如果哈希表已初始化
resize();
for ( extends K, ? extends V> e : et()) {
K key = ();
V value = ue();
putVal(hash(key), key, value, false, true);
}
}
}
```
以上就是HashMap的所有构造函数的实现原理和使用方法。在实际应用中,我们可以
根据需要选择不同的构造函数来创建HashMap对象,并且根据具体的业务场景来设置
HashMap的初始化容量、装载因子和访问顺序等参数,以实现更高效、更灵活的数据结构
设计。
版权声明:本文标题:hashmap构造函数 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.roclinux.cn/p/1710291166a566379.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论