
HashMap
王英豪很ok,
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
关于JDK7HashMap多线程场景下扩容死循环问题的原因以及JDK8的解决方案
JDK7中HashMap扩容出现死循环的本质原因是,这个集合不是线程安全的,共享变量Node结点访问出错,当前线程在扩容到槽中最后一个节点B时,由于其他线程将最后一个节点B的next引用置成了A(下图),被当前线程看到了(实际情况是,没有同步措施的情况下,当前线程可能看到,可能看不到,和线程何时将自己本地内存的值刷新到主存有关,这里涉及JMM模型和内存可见性,如有不懂请百度),导致了当前线程多执行...原创 2019-11-14 20:44:23 · 620 阅读 · 0 评论 -
JDK8中HashMap链表转红黑树的阈值为什么选8?为什么用红黑树做优化?
为什么会引入红黑树做查询优化呢?在平常我们用HashMap的时候,HashMap里面存储的key是具有良好的hash算法的key(比如String、Integer等包装类),冲突几率自然微乎其微,此时链表几乎不会转化为红黑树,但是当key为我们自定义的对象时,我们可能采用了不好的hash算法,使HashMap中key的冲突率极高,但是这时HashMap为了保证高速的查找效率,就引入了红黑树来优化...原创 2019-11-03 21:33:18 · 8894 阅读 · 7 评论 -
JDK7HashMap的存储结构以及时间复杂度
我们知道HashMap是基于Hash表来设计的,他的底层是数组和链表的结合体,那么HashMap的最大的特点就是快,因为是由键找值。(1)什么是HashMap以及HashMap的构成HashMap是基于哈希表的Map接口实现,用来存储键值对,线程不安全因此也很快,允许null值null键。HashMap实际上是一个数组和链表的结合体。键值对Map.Entry存放在链表里面,数组里面存放的是...原创 2019-03-20 13:01:01 · 7382 阅读 · 8 评论