随笔分类 -  Java集合框架

摘要:都是平衡二叉树。JDK热衷使用红黑树而非AVL树。 对比: 1、AVL树是严格平衡的,红黑树非严格平衡, 这点看查询效率AVL树 略好于 红黑树,但都是O(lon n)数量级 2、AVL树添加时最多2次旋转操作达到平衡,而删除时,可能删除节点以下的所有节点都需要旋转-> O(lon n)次 红黑树最 阅读全文
posted @ 2020-06-10 23:13 蓝天随笔 阅读(535) 评论(0) 推荐(0)
摘要:一、队列 queue常用方法: 二、List 三、Set 四、Map 阅读全文
posted @ 2020-06-09 23:07 蓝天随笔 阅读(282) 评论(0) 推荐(0)
摘要:一、定义 可以理解为"配对"队列 特点: 1、内部没有存储 2、阻塞队列 3、发送或者消费线程会阻塞,只有有一对消费和发送线程匹配上,才同时退出。 4、配对有公平模式和非公平模式(默认) 公平模式用队列实现 ,每次从队列head开始匹配 非公平模式用栈实现,每次从栈顶开始匹配。 二、使用 代码: p 阅读全文
posted @ 2020-06-08 23:23 蓝天随笔 阅读(3060) 评论(0) 推荐(1)
摘要:一、定义 时延队列,只要经过一段时间后才能从队列中取出。 特点: 1、无界的阻塞队列。 2、只能存放实现了Delayed接口的对象 时延就是通过getDelay获取的,getDelay<=0时,才能取出队列中的值 3、内部使用PriorityQueue , 比较的就是时延 二、使用 代码样例 pub 阅读全文
posted @ 2020-06-08 22:58 蓝天随笔 阅读(327) 评论(0) 推荐(0)
摘要:1、支持并发 使用CAS保证更新的原子性 线程安全 2、状态不一致 head tail并非总是指向真正的头尾节点 只有head/tail与头尾节点的距离超过HOPS阈值 才会更新head tail 3个不等式保证数据处理正确: 基本不变式 在执行方法之前和之后,队列必须要保持的不变式: 当入队插入新 阅读全文
posted @ 2019-09-24 23:38 蓝天随笔 阅读(534) 评论(0) 推荐(0)
摘要:1、阻塞和非阻塞 ConcurrentLinkedQueue是非阻塞的线程安全队列 2、ConcurrentLinkedQueue是无界的 LinkedBlockingQueue可以指定大小 3、加锁方式 ConcurrentLinkedQueue使用CAS 原子指令来保证线程安全。吞吐量更高 Li 阅读全文
posted @ 2019-09-22 16:34 蓝天随笔 阅读(1056) 评论(0) 推荐(0)
摘要:1、并非按FIFO进出 传统的queue 是按先进先出的顺序执行。而PriorityQueue是按优先级来绝对的 优先级低的先出queue 2、如何排序 PriorityQueue既然有优先级排序 那么如何排序的。 a. 放入队列的元素实现了Comparable接口 按其自然顺序排序 从小到大。 b 阅读全文
posted @ 2019-09-22 16:25 蓝天随笔 阅读(1487) 评论(0) 推荐(0)
摘要:1、ArrayBlockingQueue采用动态数组 takeIndex和putIndex 表示存和取的两个数组下标。 有界 (必须指明数组大小) 不能存放null 读和写公用一个ReentrantLock 2、LinkedBlockingQueue采用链表实现 默认无界(可以在初始化时指明大小) 阅读全文
posted @ 2019-09-22 15:54 蓝天随笔 阅读(1582) 评论(0) 推荐(1)
摘要:1、背景 java诞生之初 就有线程安全的Vector,但Vector对读写都是通过synchronized关键字来同步的,性能并不好 且Vector每次扩容是原来的1倍,存在内存浪费的可能。 对于线程安全的List JDK提供了CopyOnWriteArrayList 2、原理 2.1 CopyO 阅读全文
posted @ 2019-09-16 23:23 蓝天随笔 阅读(1134) 评论(0) 推荐(0)
摘要:1、数据结构 ArrayList底层使用数组实现,默认大小10,容量不足时需动态扩容为原来的1.5倍 LinkedList底层使用双向链表实现,无大小限制 2、使用场景 ArrayList使用数组对于索引操作即(set get方法)时间复杂度为O(1) 而LinkedList索引时需要从头遍历从而找 阅读全文
posted @ 2019-09-16 22:49 蓝天随笔 阅读(968) 评论(0) 推荐(0)
摘要:1、总体结构 Map和Collection是分开的。Collection下有List Queue Set 3个接口。 2、List结构 3、Set结构 4、Queue结构 5、Map结构 6、Deque结构 7、常用的List ArrayList: 数组实现,初始长度10,每次扩容增加0.5倍(0. 阅读全文
posted @ 2019-09-05 23:43 蓝天随笔 阅读(1060) 评论(0) 推荐(0)