基本介绍
其实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> {...

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

最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



