随笔分类 -  java集合

摘要:概览 我们先来看一看java中所有集合的类关系图。 这里面的类太多了,请放大看,如果放大还看不清,请再放大看,如果还是看不清,请放弃。 我们下面主要分成五个部分来逐个击破。 List List中的元素是有序的、可重复的,主要实现方式有动态数组和链表。 java中提供的List的实现主要有ArrayL 阅读全文
posted @ 2020-07-13 17:52 hiram-QI 阅读(306) 评论(0) 推荐(1)
摘要:问题 (1)LinkedList只是一个List吗? (2)LinkedList还有其它什么特性吗? (3)LinkedList为啥经常拿出来跟ArrayList比较? (4)我为什么把LinkedList放在最后一章来讲? 简介 LinkedList是一个以双向链表实现的List,它除了作为Lis 阅读全文
posted @ 2020-07-13 17:39 hiram-QI 阅读(157) 评论(0) 推荐(0)
摘要:问题 (1)什么是双端队列? (2)ArrayDeque是怎么实现双端队列的? (3)ArrayDeque是线程安全的吗? (4)ArrayDeque是有界的吗? 简介 双端队列是一种特殊的队列,它的两端都可以进出元素,故而得名双端队列。 ArrayDeque是一种以数组方式实现的双端队列,它是非线 阅读全文
posted @ 2020-07-13 16:50 hiram-QI 阅读(140) 评论(0) 推荐(0)
摘要:问题 (1)DelayQueue是阻塞队列吗? (2)DelayQueue的实现方式? (3)DelayQueue主要用于什么场景? 简介 DelayQueue是java并发包下的延时阻塞队列,常用于实现定时任务。 继承体系 从继承体系可以看到,DelayQueue实现了BlockingQueue, 阅读全文
posted @ 2020-07-13 16:48 hiram-QI 阅读(187) 评论(0) 推荐(0)
摘要:问题 (1)ConcurrentLinkedQueue是阻塞队列吗? (2)ConcurrentLinkedQueue如何保证并发安全? (3)ConcurrentLinkedQueue能用于线程池吗? 简介 ConcurrentLinkedQueue只实现了Queue接口,并没有实现Blockin 阅读全文
posted @ 2020-07-13 15:42 hiram-QI 阅读(292) 评论(0) 推荐(0)
摘要:问题 (1)LinkedTransferQueue是什么东东? (2)LinkedTransferQueue是怎么实现阻塞队列的? (3)LinkedTransferQueue是怎么控制并发安全的? (4)LinkedTransferQueue与SynchronousQueue有什么异同? 简介 L 阅读全文
posted @ 2020-07-13 15:35 hiram-QI 阅读(516) 评论(0) 推荐(1)
摘要:问题 (1)PriorityBlockingQueue的实现方式? (2)PriorityBlockingQueue是否需要扩容? (3)PriorityBlockingQueue是怎么控制并发安全的? 简介 PriorityBlockingQueue是java并发包下的优先级阻塞队列,它是线程安全 阅读全文
posted @ 2020-07-13 14:56 hiram-QI 阅读(225) 评论(0) 推荐(0)
摘要:问题 (1)SynchronousQueue的实现方式? (2)SynchronousQueue真的是无缓冲的吗? (3)SynchronousQueue在高并发情景下会有什么问题? 简介 SynchronousQueue是java并发包下无缓冲阻塞队列,它用来在两个线程之间移交元素,但是它有个很大 阅读全文
posted @ 2020-07-10 16:51 hiram-QI 阅读(250) 评论(0) 推荐(0)
摘要:问题 (1)LinkedBlockingQueue的实现方式? (2)LinkedBlockingQueue是有界的还是无界的队列? (3)LinkedBlockingQueue相比ArrayBlockingQueue有什么改进? 简介 LinkedBlockingQueue是java并发包下一个以 阅读全文
posted @ 2020-07-06 17:47 hiram-QI 阅读(188) 评论(0) 推荐(0)
摘要:问题 (1)ArrayBlockingQueue的实现方式? (2)ArrayBlockingQueue是否需要扩容? (3)ArrayBlockingQueue有什么缺点? 简介 ArrayBlockingQueue是java并发包下一个以数组实现的阻塞队列,它是线程安全的,至于是否需要扩容,请看 阅读全文
posted @ 2020-07-06 17:45 hiram-QI 阅读(143) 评论(0) 推荐(0)
摘要:问题 (1)什么是优先级队列? (2)怎么实现一个优先级队列? (3)PriorityQueue是线程安全的吗? (4)PriorityQueue就有序的吗? 简介 优先级队列,是0个或多个元素的集合,集合中的每个元素都有一个权重值,每次出队都弹出优先级最大或最小的元素。 一般来说,优先级队列使用堆 阅读全文
posted @ 2020-07-06 09:26 hiram-QI 阅读(157) 评论(0) 推荐(0)
摘要:问题 (1)ConcurrentSkipListSet的底层是ConcurrentSkipListMap吗? (2)ConcurrentSkipListSet是线程安全的吗? (3)ConcurrentSkipListSet是有序的吗? (4)ConcurrentSkipListSet和之前讲的Se 阅读全文
posted @ 2020-07-02 14:51 hiram-QI 阅读(193) 评论(0) 推荐(0)
摘要:问题 (1)CopyOnWriteArraySet是用Map实现的吗? (2)CopyOnWriteArraySet是有序的吗? (3)CopyOnWriteArraySet是并发安全的吗? (4)CopyOnWriteArraySet以何种方式保证元素不重复? (5)如何比较两个Set中的元素是否 阅读全文
posted @ 2020-07-02 14:39 hiram-QI 阅读(268) 评论(0) 推荐(0)
摘要:简介 TreeSet底层是采用TreeMap实现的一种Set,所以它是有序的,同样也是非线程安全的。 源码解析 经过前面我们学习HashSet和LinkedHashSet,基本上已经掌握了Set实现的套路了。 所以,也不废话了,直接上源码: package java.util; // TreeSet 阅读全文
posted @ 2020-05-30 17:06 hiram-QI 阅读(196) 评论(0) 推荐(0)
摘要:简介 上一节我们说HashSet中的元素是无序的,那么有没有什么办法保证Set中的元素是有序的呢? 答案是当然可以。 我们今天的主角LinkedHashSet就有这个功能,它是怎么实现有序的呢?让我们来一起学习吧。 源码分析 LinkedHashSet继承自HashSet,让我们直接上源码来看看它们 阅读全文
posted @ 2020-05-07 18:36 hiram-QI 阅读(188) 评论(0) 推荐(0)
摘要:简介 集合,这个概念有点模糊。 广义上来讲,java中的集合是指java.util包下面的容器类,包括和Collection及Map相关的所有类。 中义上来讲,我们一般说集合特指java集合中的Collection相关的类,不包含Map相关的类。 狭义上来讲,数学上的集合是指不包含重复元素的容器,即 阅读全文
posted @ 2020-05-07 09:54 hiram-QI 阅读(204) 评论(0) 推荐(0)
摘要:简介 跳表是一个随机化的数据结构,实质就是一种可以进行二分查找的有序链表。 跳表在原有的有序链表上面增加了多级索引,通过索引来实现快速查找。 跳表不仅能提高搜索性能,同时也可以提高插入和删除操作的性能。 存储结构 跳表在原有的有序链表上面增加了多级索引,通过索引来实现快速查找。 源码分析 主要内部类 阅读全文
posted @ 2020-05-06 20:35 hiram-QI 阅读(192) 评论(0) 推荐(0)
摘要:何为跳表? 跳表是一个随机化的数据结构,实质就是一种可以进行二分查找的有序链表。 跳表在原有的有序链表上面增加了多级索引,通过索引来实现快速查找。 跳表不仅能提高搜索性能,同时也可以提高插入和删除操作的性能。 跳表详解 有序链表 考虑一个有序链表,我们要查找3、7、17这几个元素,我们只能从头开始遍 阅读全文
posted @ 2020-05-06 12:04 hiram-QI 阅读(318) 评论(0) 推荐(0)
摘要:简介 ConcurrentHashMap是HashMap的线程安全版本,内部也是使用(数组 + 链表 + 红黑树)的结构来存储元素。 相比于同样线程安全的HashTable来说,效率等各方面都有极大地提高。 各种锁简介 这里先简单介绍一下各种锁,以便下文讲到相关概念时能有个印象。 (1)synchr 阅读全文
posted @ 2020-04-30 09:39 hiram-QI 阅读(177) 评论(0) 推荐(0)
摘要:简介 WeakHashMap是一种弱引用map,内部的key会存储为弱引用,当jvm gc的时候,如果这些key没有强引用存在的话,会被gc回收掉,下一次当我们操作map的时候会把对应的Entry整个删除掉,基于这种特性,WeakHashMap特别适用于缓存处理。 类图 可见,WeakHashMap 阅读全文
posted @ 2020-04-29 18:26 hiram-QI 阅读(166) 评论(0) 推荐(0)