从源码分析jdk1.8中HashMap的put过程

本文详细解读了HashMap中的核心变量,如默认容量、最大容量、负载因子等,以及put方法的工作流程,包括计算哈希值、数组操作、链表与红黑树的转换机制。

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

hashMap中定义了一系列变量,我们先来解读一下hashMap中定义的几个变量的含义

// 这是hashMap的默认容量,必须为2的幂,至于为什么是2的幂,后面我们会提,默认是16
static final int DEFAULT_INITIAL_CAPACITY = 1 << 4; // aka 16

// 这是容量的最大值,容量不能超过这个值
static final int MAXIMUM_CAPACITY = 1 << 30;

// 默认加载因子,表示hash允许的饱和程度
static final float DEFAULT_LOAD_FACTOR = 0.75f;

// 链表树化阈值,我们都知道hashmap中链表过长会向红黑树转化,这个值表示当链表长度超过时就会向红黑树转化
static final int TREEIFY_THRESHOLD = 8;

// 链表过长会向红黑树转化,同理,树的长度过短也会向链表转化,这个值就表示当红黑树长度向链表转化的最小长度
static final int UNTREEIFY_THRESHOLD = 6;

// 最小树化数组长度,看过一部分源码的都会觉得链表长度大于8时就会向红黑树转化,实则不然,有一个前提条件,就是数组长度要大于一个阈值
// 这个值就表示链表向红黑树转化时数组的最小长度
static final int MIN_TREEIFY_CAPACITY = 64;
public V put(K key, V value) {
   
    return putVal(hash(key), key
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值