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