![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
源码分析
文章平均质量分 70
Java源码分析
猴子奔跑
这个作者很懒,什么都没留下…
展开
-
HashMap在并发情况下出现死循环的问题?
HashMap的数据结构: HashMap是用一个指针数组(假设为table[])来做分散所有的key,当一个key被加入时,会通过Hash算法通过key算出这个数组的下标i,然后就把这个<key, value>插到table[i]中,如果有两个不同的key被算在了同一个i,那么就叫冲突,又叫碰撞,这样会在table[i]上形成一个链表。我们知道,如果table[]的尺寸很小,比如只有2个,如果要放进10个keys的话,那么碰撞非常频繁,于是一个O(1)的查找算法,就变成了链表遍历,性能原创 2021-05-28 15:44:52 · 1459 阅读 · 0 评论 -
说说你对HashMap的理解?
HashMap是一种存取高效但是不保证有序的常用容器。它的数据结构为“数组+链表”,这是解决哈希冲突的产物(链地址法)。它实现了Map接口,采用KEY-VALUE键值对的形式存储数据,并且实现了浅拷贝和序列化。 HashMap 的默认初始大小为16,初始化大小必须为2的幂,最大大小为2的30次方。数组中存储的链表节点为Entry数组,在jdk1.8源码中将Entry改为了Node,它们都实现了Map下的Entry接口。HashMap 的阈值默认为“容量*0.75f”,当存储节点数量超过该值,则对m原创 2021-05-28 11:48:07 · 1773 阅读 · 0 评论 -
HashMap源码分析hash函数(扰动函数)
JDK1.7的hash()方法(扰动函数):final int hash(Object k) { int h = hashSeed; if (0 != h && k instanceof String) { return sun.misc.Hashing.stringHash32((String) k); } h ^= k.hashCode(); // This function e原创 2021-05-25 21:42:49 · 2045 阅读 · 1 评论