HashMap源码
文章平均质量分 75
staysilent
这个作者很懒,什么都没留下…
展开
-
3. HashMap源码: hashmap方法(增添节点部分)
hashmap方法tableSizeFor:获取最小2整数幂作用是查找大于等于传参容量的最小2的整数幂,赋值给threshold阈值。由于扩容是当前数组下标值加上原数组长度,所以需要扩充到原先两倍大小,又因为初始是16,所以一定扩容后的大小是2的整数幂。static final int tableSizeFor(int cap) { int n = cap - 1; n |= n >>> 1; n |= n >>> 2原创 2021-01-11 17:34:44 · 198 阅读 · 0 评论 -
2. HashMap源码:红黑树源码解析
红黑树存在方法不全,日后慢慢添加。。。主要特性平衡二叉树:左右子树的高度差不超过1根节点是黑色红色节点的子节点一定是黑色,也就是红色节点不能在纵向连续出现一个黑色节点可以存在两个红色节点,也就是红色节点可以在横向连续出现每个节点到根节点的路径上,黑色节点的数目是相同的。红黑树的左旋右旋这里单独把红黑树中左旋右旋的方法拿出来进行理解。这里引用了博客:左旋:以某个结点作为支点(旋转结点),其右子结点变为旋转结点的父结点,右子结点的左子结点变为旋转结点的右子结点,左子结点保持不变。原创 2021-01-11 17:04:17 · 300 阅读 · 2 评论 -
1. HashMap源码:内部结构初看
hashmap的内部结构hashmap由两部分组成,桶数组table和链表/红黑树。桶数组就是个数组,每个元素都是一个链表的头节点。链表的节点就是键值对,根据每一处链表长度来决定其是单向链表还是红黑树。transient Node<K,V>[] table // 容量总是2的整数幂,原因在于每次扩容resize需要划分链表/树,高链表下标是旧数组长度+旧数组下标,所以新数组长度要是旧数组*2,初始数组长度是16,所以一定是2的整数幂。可见resize方法。单链表节点(篇幅原因仅原创 2021-01-11 16:10:30 · 219 阅读 · 0 评论