并发容器的整理
文章平均质量分 84
Java技术践行者
让我们一起在开发这条路,默默深耕,用技术改变生活
展开
-
Hash算法
在同一个版本的Jdk中,HashMap、HashTable以及ConcurrentHashMap里面的hash方法的实现是不同的HashMap采用的是位运算:当哈希表的大小为素数时,简单的取模哈希的结果会更加均匀,所以单从这一点上看,HashTable的哈希表大小选择,似乎更高明些。因为hash结果越分散效果越好。HashTable采用的是直接取模:在取模计算时,如果模数是2的幂,...原创 2020-03-10 18:15:21 · 110 阅读 · 0 评论 -
HashMap--Java8和Java7
特点初始size为16,扩容:newsize = oldsize*2,size一定为2的n次幂 扩容针对整个Map,每次扩容时,原来数组中的元素依次重新计算存放位置,并重新插入 插入元素后才判断该不该扩容,有可能无效扩容(插入后如果扩容,如果没有再次插入,就会产生无效扩容) 当Map中元素总数超过Entry数组的75%,触发扩容操作,为了减少链表长度,元素分配更均匀 计算index方法...原创 2020-03-10 18:14:36 · 173 阅读 · 0 评论 -
CopyOnWriteArrayList
CopyOnWrite容器即写时复制的容器。通俗的理解是当我们往一个容器添加元素的时候,不直接往当前容器添加,而是先将当前容器进行Copy,复制出一个新的容器,然后新的容器里添加元素,添加完元素之后,再将原容器的引用指向新的容器。这样做的好处是我们可以对CopyOnWrite容器进行并发的读,而不需要加锁,因为当前容器不会添加任何元素。所以CopyOnWrite容器也是一种读写分离的思想,读和写不...原创 2019-06-20 15:31:27 · 812 阅读 · 1 评论 -
ConcurrentHashMap
一:HashTable1:底层数组+链表实现,无论key还是value都不能为null,线程安全,实现线程安全的方式是在修改数据时锁住整个HashTable(synchronized关键字),效率低2:初始size为11,扩容:newsize = olesize*2+13:计算index的方法:index = (hash & 0x7FFFFFFF) % tab.length...原创 2019-06-20 15:32:41 · 141 阅读 · 0 评论