HashMap是Java集合框架中非常重要的一个类,它实现了Map接口,用于存储键值对。HashMap允许使用null作为键和值,下面是对 HashMap源码的基本解析,主要关注其内部结构和核心方法。
内部结构
Node 节点
HashMap内部通过Node类来存储键值对。每个Node对象包含一个键、一个值、一个指向下一个 Node的引用(用于解决哈希冲突时的链表),以及一个用于标识节点类型的hash值。
static class Node<K,V> implements Map.Entry<K,V> {
final int hash;
final K key;
V value;
Node<K,V> next;
// ... 省略其他方法和构造函数 ...
}
数组
HashMap使用一个Node数组来存储元素。数组的每个位置称为桶(bucket),通过哈希函数计算键的哈希值,然后将哈希值映射到数组的某个位置。
transient Node<K,V>[] table;
负载因子和阈值
负载因子(`loadFactor`)用于控制哈希表的扩容。当哈希表中的元素数量达到阈值(`threshold`,即 `table.length * loadFactor`)时,哈希表会进行扩容。
final float loadFactor;
int threshold;
大小
HashMap使