Map源码解析

本文详细剖析了HashMap的底层实现,包括哈希桶的结构、负载因子的作用、节点的构造以及put方法中如何处理哈希冲突、链表转红黑树的过程。重点介绍了resize方法和哈希值计算策略以优化性能。

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

基本介绍

其实HashMap底层是个什么东西我们之前也讲过, 就是一个哈希桶(差不多可以看成一个数组), 然后每一个节点又连接着链表/红黑树之类的, 下面让我们看一看具体在源码上是怎样实现的:

常量及其它

-> static final int DEFAULT_INITIAL_CAPACITY = 1 << 4; 

//这个指代的是哈希桶的大小, 默认为16

-> static final float DEFAULT_LOAD_FACTOR = 0.75f;

//默认的负载因子 -> 0.75

-> static final int TREEIFY_THRESHOLD = 8;

//树化的条件之一, 就是指当一个节点上的链表长度大于8时(也不一定是8, 但跟8是有关的, 后面讲put的时候再说),就会从链表转换为红黑树

-> static final int MIN_TREEIFY_CAPACITY =  64;

//树化的条件之一, 就是指当哈希桶的大小如果大于64(数组的长度), 就会将链表转换成红黑树

-> static final int UNTREEIFY_THRESHOLD = 6;

//解树化的条件, 当红黑树的大小小于8时, 就会从红黑树转换回链表. 

-> static class Node<K, V> implements Map.Entry<K, V> {...

评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值