JAVA
文章平均质量分 89
JAVA网络、并发、虚拟机等
君子一笑
这个作者很懒,什么都没留下…
展开
-
JAVA数据结构与算法之延迟队列(二):HashedWheelTimer
HashedWheelTimer原创 2020-12-22 15:02:57 · 324 阅读 · 0 评论 -
JAVA源码剖析之HashMap(六):hashCode()方法的作用和equals()方法
hashCode()方法的作用 在Java中,hashCode方法的主要作用是为了配合基于散列的集合一起正常运行,这样的散列集合包括HashSet、HashMap以及HashTable。 用HashMap举例说明下,为了判断HashMap中存在不存在key,HashMap不用遍历里面的所有元素进行判断再取值,为什么呢?HashMap类中维护了一个数组(俗称桶或箱子),桶的类型是链表或者红黑树,每次进行put运算时,都会对key的hashCode值进行hash运算,得到的hash值与数组元素的个数进行与运算,原创 2020-12-21 16:00:22 · 289 阅读 · 0 评论 -
JAVA源码剖析之HashMap(五):get()方法
get()方法 get()方法比较简单,首先通过hash值定位指定key的table[]数组索引,其次优先比较第一个元素是否相等,如果不相等则走红黑树的getTreeNode()逻辑或者链表遍历查找比较。 public V get(Object key) { Node<K,V> e; return (e = getNode(hash(key), key)) == null ? null : e.value; } final Node<K,V> getNode(int原创 2020-12-21 15:48:55 · 164 阅读 · 0 评论 -
JAVA源码剖析之HashMap(四):元素插入put()方法
put()方法 通过插入元素的hash值找到插入元素对应的桶的索引。 桶为NULL直接插入,否则处理红黑树的插入TreeNode.putTreeVal或者链表的插入,链表的插入逻辑比较简单,遍历链表的元素,如果链表元素与插入元素相等则取消插入,否则插入到链表的尾部,同时如果插入后的链表长度大于TREEIFY_THRESHOLD则将链表转换成红黑树。 处理是否覆盖旧值。 如果容量大于扩容阈值则进行扩容resize()。 public V put(K key, V value) { return p原创 2020-12-21 13:18:28 · 210 阅读 · 0 评论 -
JAVA源码剖析之HashMap(三):扩容resize()、负载因子、扩容容量
扩容时机 当HashMap的键值对KV数量大于扩容阈值threshold(threshold = capacity * loadFactor)或table[]数组未初始化时,会进行扩容操作。 resize()方法分析 分三步 计算新的容量值newCap和扩容阈值newThr。 实例化新的table[]数组并初始化大小为新的容量大小newCap。 数据迁移,链表的迁移原理:扩容之后,由于新容量capacity为旧容量oldCap的2倍,且它们都为2的整数幂,对于该链表上的元素,如果(hash & o原创 2020-12-21 13:23:43 · 143 阅读 · 0 评论 -
JAVA源码剖析之HashMap(二):hash()和tableSizeFor()方法
hash()方法 hash函数的作用是使元素hash值更加发散,经过hash()处理之后,hash值的高16位没变,低16为原来的低16与高16异或的结果,即用16位来综合了高16位和低16位的影响,这样能提高key的发散性的主要原因是table的长度通常小于216 ,通过hash%table.length就能更发散 static final int hash(Object key) { int h; // h >>> 16即h右移16位 return (key =原创 2020-12-15 15:22:23 · 79 阅读 · 0 评论 -
JAVA源码剖析之HashMap(一):成员变量和构造函数
本系列基于JDK8源码进行分析,HashMap类常量定义如下: 最大容量 static final int MAXIMUM_CAPACITY = 1 << 30 // 所有箱子的最大容量,必须为2^n。 默认容量 static final int DEFAULT_CAPACITY = 1 << 4 // 所有箱子的默认容量,必须为2^n。 负载因子 static final float LOAD_FACTOR = 0.75f // 负载因子 = 总键值对数 / 箱子个数,因此初始状原创 2020-12-15 11:48:48 · 160 阅读 · 0 评论