
容器源码解析
南墩-小仙女
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
ArrayList源码解析
ArrayList 数组列表 底层由数组实现 线程不安全 适合随机查找、更新(通过下标 时间复杂度为O(1)) 不适合大量的新增、删除(涉及数组的移动) ArrayList相关的UML 进入源码 看看有哪些属性 /** * 默认容量 10 */ private static final int DEFAULT_CAPACITY = 10; /** * 长度为0数组 *...原创 2019-07-09 09:08:49 · 119 阅读 · 0 评论 -
LinkedBlockingQueue源码解析
基于jdk1.8 线程安全 底层实现原理:单项链表 + 2个ReentrantLock + 2个Condition 生产和消费数据用的不是同一独占锁,生产和消费是可以同时进行 生产者从队尾添加数据,消费者从队头的下一个节点开始获取数据 生产数据达到了容量则生产线程等待,消费者消费完了数据则消费者线程等待 头节点的数据项为null,不允许添加的数据项为null LinkedBlockingQue...原创 2019-09-07 16:07:28 · 242 阅读 · 0 评论 -
ArrayBlockingQueue源码解析
基于jdk1.8 数组阻塞队列 线程安全的 底层:对象数组+ReentrantLock + notFullCondition + notFullCondition notFullCondition+notFullCondition用的是同一个ReentrantLock 出队列与入队列是阻塞进行的,某个时间点,只有一个线程能获取到锁,然后生产或者消费数据 添加的数据不能为null 队列长度是有限制...原创 2019-09-04 21:30:43 · 193 阅读 · 0 评论 -
LinkedHashSet源码解析
版本:jdk1.8 继承HashSet 初始化的时候会把父类HashSet中的属性map初始化为了LinkedHashMap 可以保证插入或者读取的顺序 LinkedHashSet默认accessOrder是以插入的顺序 数据不可重复 非线程安全 LinkedHashSet相关的UML 重要构造 /** * 把父类HashSet中的属性map初始化为了LinkedHashM...原创 2019-08-22 19:32:49 · 209 阅读 · 0 评论 -
Stack源码解析
版本:jdk1.8 栈 先进后出FILO 继承Vector 底层是由数组实现 用synchronized关键字保证线程安全 已不推荐使用 Stack相关的UML 重要属性都是来自Vector protected修饰,子类是可以直接使用的 /** * 对象数组 */ protected Object[] elementData; /** ...原创 2019-08-21 20:36:38 · 175 阅读 · 0 评论 -
Vector源码解析
版本:jdk1.8 底层由数组实现的 线程安全的 关键方法上都加上了synchronized同步关键字 并发安全但为此开销也会较大 已不推荐使用 Vector相关的UML 我们先来看看HashMap重要属性 /** * 对象数组 */ protected Object[] elementData; /** * 数据的数量 */...原创 2019-08-20 21:40:30 · 144 阅读 · 0 评论 -
LinkedHashMap源码解析
版本:jdk1.8 继承了HashMap 通过双向链表将所有节点连接起来 主要是实现了HashMap中留的几个空方法来完成自己的特性 数据可以按插入、读取的顺序访问 利用它的特性可以实现LRU(最近最少使用算法) LinkedHashMap相关的UML 数组+链表/红黑树实现 红黑树这里我就没话化,画了个链表意思一下 先来看看有哪些重要的属性 HashMap中的这里就不说了哈,大家可以自...原创 2019-07-22 23:10:41 · 165 阅读 · 0 评论 -
HashSet源码解析
版本:jdk1.8 底层由HashMap实现 非线程安全 数据不可重复 由HashMap中的key不可重复保证 所有的操作都是由内部属性HashMap HashSet相关的UML 我们先来看看HashMap重要属性 构造 初始化了内部属性HashMap hashSet.add 由内部属性HashMap实现 public boolean add(E e) { ret...原创 2019-07-21 17:07:14 · 251 阅读 · 0 评论 -
HashMap源码解析
版本:jdk1.8 键值对的方式存储 线程不安全 底层由数组+链表/红黑树实现 键值都可以为null 键不允许重复 值可以重复 在没有hash碰撞的情况下增删改查的时间复杂度为O(1) 链表和红黑树会相互转化 ...原创 2019-07-21 16:35:02 · 134 阅读 · 0 评论 -
LinkedList源码解析
版本:jdk1.8 底层由双向链表实现 线程不安全 适合大量随机删除、插入 不合适频繁的查询 删除和插入 只是指针的移动 与Arraylist(数组的移动)相比是用空间去换取时间 查询LinkedList会把index与(size/2)作比较 选取是从头还是从尾开始查询O(N/2) Arraylist是随机访问时间复杂度O(1) LinkedList相关的UML 重要的属性 /** ...原创 2019-07-16 08:57:50 · 114 阅读 · 0 评论 -
LinkedBlockingDeque源码解析
基于jdk1.8 双端阻塞队列 线程安全的 实现原理:双向链表 + 1个ReentrantLock + 2个Condition 生产者和消费者同一把独占锁,同一时刻只有一个线程能获取到锁生产者在生产数据或者一个消费者在消费数据 生产的数据不能为null 生产者生产数据、消费者消费数据可以从队头或者队尾 LinkedBlockingDeque的UML 双向链表实现 节点数据结构 /*...原创 2019-09-17 22:18:59 · 193 阅读 · 0 评论