前言
接着上篇文章《HashMap加载因子为什么是0.75?转化红黑树阈值为8?》,咱们继续聊聊 HashMap 这个重要的数据结构。虽然它很简单,但是每一次读源码,我都有不同的体会,当然唯一不变的是对 Doug Lea 大神的崇拜。
在 JDK8 之后,对 HashMap 进行了重写,最显而易见的当然是引入了红黑树。由此而来,对它的哈希算法和寻址算法也做了一定的优化。
正文
寻址算法
在插入和查找数据的时候,我们会根据 key 得到它对应的 hash 值,然后再根据这个 hash 值进行一系列计算,得到元素在数组的下标位置,这个计算过程就是就是寻址算法。
final Node<K,V> getNode(int hash, Object key) {
Node<K,V>[] tab; Node<K,V> first, e; int n; K k;
if ((tab = table) != null && (n = tab.length) > 0 &&

本文介绍了JDK8中HashMap的优化,包括使用与运算代替模运算作为寻址算法,以提高效率,并详细解析了哈希算法中异或和右移16位的操作,以降低哈希冲突。
最低0.47元/天 解锁文章
513

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



