![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java容器学习笔记
文章平均质量分 88
记录学习Java容器时的笔记
vXZH
这个作者很懒,什么都没留下…
展开
-
JDK1.8 ConcurrentHashMap之源码分析笔记
前言 JDK1.8 的ConcurrentHashMap相较于JDK1.7 的做了比较大的改动,取消了分段锁的设计。JDK8改成了Node数组+链表/红黑树,Node 是类似于一个 HashEntry 的结构。它的冲突再达到一定大小时会转化成红黑树,在冲突小于一定数量时又退回链表。同时使用了CAS和synchronized锁来保证线程安全,synchronized锁的粒度为桶中的头节点(链表Node结点或包装红黑树的TreeBin结点)。(JDK1.7 的ConcurrentHashMap分析见此篇文章)原创 2021-02-14 14:01:26 · 216 阅读 · 0 评论 -
JDK1.7 ConcurrentHashMap学习笔记
为何用ConcurrentHashMap 在并发编程里,HashMap是线程不安全的,如果使用HashMap的话,那么可能会造成死循环,原因是HashMap里的Entry链表在多线程操作下,会变成循环链表,那么一旦get的话,那么next节点永远不为空,就会出现死循环了。 而HashTable的操作效率又过低,因为它是使用synchronized对整个HashTable加锁,所有线程都是在竞争同一把锁。当一个线程访问HashTable的同步方法,其他线程如果也访问它的同步方法时会陷入阻塞或轮询状态。如一个线原创 2021-01-29 11:45:36 · 222 阅读 · 2 评论 -
LinkedList容器学习笔记
简介 LinkedList是个实现了List接口和Deque接口的双端链表。具有以下特性: 支持高效的插入和删除操作,定位到节点后直接插入/删除即可,无需像ArrayList移动大量元素 实现了Deque接口,同时具有双向队列的特性 线程不安全,如需线程安全,使用静态类Collections类中的synchronizedList方法 查找元素需要遍历,效率较低 内部结构分析 LinkedList内部有以下3个字段,first指向链表头部,last指向链表尾部,size表示链表的长度。 trans原创 2021-01-24 15:06:16 · 133 阅读 · 0 评论 -
HashMap容器学习笔记
简介 HashMap是用来存储键值对的集合,实现了Map接口。 它是根据键的hashCode来存储数据,键的存放是无序的,即遍历顺序是不确定的。 线程不安全,多线程操作可能出现死循环。多线程场景下建议使用ConcurrentHashMap。 最多允许一个键为null,允许多个值为null。 底层数据结构 JDK1.8之前,HashMap是由 数组+链表 实现的,是一个链表数组。链表是为了解决哈希冲突而存在的(“拉链法”),如果遇到哈希冲突,则把数据插入到链表的头部(“头插法”)。 JDK1.8之后,Ha原创 2021-01-23 10:38:47 · 163 阅读 · 0 评论 -
ArrayList容器学习笔记
简介 ArrayList:底层是数组队列,相当于动态数组,它的容量能动态扩充。在添加大量元素之前,使用ensureCapacity方法来提前扩大ArrayList的容量,可减少重新分配内存的次数和复制数组时的开销。 继承自AbstractList,实现了List,RandomAccess,Cloneable,java.io.Serializable。 RandomAccess:标志接口,表示支持快速随机访问,在ArrayList中我们可以用元素索引来快速访问对象。 Cloneable:覆盖clone方法,原创 2021-01-20 13:04:50 · 130 阅读 · 0 评论