集合类
文章平均质量分 92
星火燎原bbb
这个作者很懒,什么都没留下…
展开
-
HashMap JDK1.8实现原理
转自https://www.cnblogs.com/duodushuduokanbao/p/9492952.htmlHashMap概述HashMap存储的是key-value的键值对,允许key为null,也允许value为null。HashMap内部为数组+链表的结构,会根据key的hashCode值来确定数组的索引(jdk1.7版确认放在哪个桶里),如果遇到索引相同的key,桶的大小是2,...转载 2019-04-30 10:43:46 · 292 阅读 · 0 评论 -
jdk1.7版hashmap在多线程环境下的死循环问题
一、背景介绍:在看JDK1.7的HashMap源码是看到了resize()的源代码,当时发现在将old链表中引用数据复制到新的链表中时,新table[]的列表采用LIFO方式,即队头插入。这样做的目的是:避免尾部遍历。(尾部遍历是指新列表插入数据时,每次遍历旧列表队尾的位置)因为,直接插入的效率更高。然而直接采用队头插入,会使得新链表数据倒序二、存在的问题:采用队头插入的方式,导致了Has...转载 2019-04-30 12:19:00 · 1633 阅读 · 3 评论 -
ConcurrentHashMap原理分析(1.7与1.8)
前言以前写过介绍HashMap的文章,文中提到过HashMap在put的时候,插入的元素超过了容量(由负载因子决定)的范围就会触发扩容操作,就是rehash,这个会重新将原数组的内容重新hash到新的扩容数组中,在多线程的环境下,存在同时其他的元素也在进行put操作,如果hash值相同,可能出现同时在同一数组下用链表表示,造成闭环,导致在get时会出现死循环,所以HashMap是线程不安全的。...转载 2019-04-30 14:51:45 · 154 阅读 · 0 评论