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

HashMap(Map m)是HashMap类的拷贝构造函数,用于创

建一个新的HashMap对象,并将参数m中的所有键值对拷贝到新的HashMap对象中。该构

造函数中会先调用HashMap()构造函数创建一个默认大小的HashMap对象,然后调用

putAll方法将参数m中的所有键值对添加到新的HashMap对象中。

// 创建默认大小的HashMap对象

old = DEFAULT_INITIAL_CAPACITY;

init();

putMapEntries(m);

}

final void putMapEntries(Map 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 ( e : et()) {

K key = ();

V value = ue();

putVal(hash(key), key, value, false, true);

}

}

}

```

以上就是HashMap的所有构造函数的实现原理和使用方法。在实际应用中,我们可以

根据需要选择不同的构造函数来创建HashMap对象,并且根据具体的业务场景来设置

HashMap的初始化容量、装载因子和访问顺序等参数,以实现更高效、更灵活的数据结构

设计。


本文标签: 对象 实现 容量 因子 使用