![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java集合
文章平均质量分 87
iteye_11160
这个作者很懒,什么都没留下…
展开
-
Jdk1.6 Collections Framework源码解析(1)-ArrayList
工作中经常会用到Java的集合类,最近不忙了,把相关知识总结一下,便于理解记忆。 打开java.util.ArrayList的源代码,首先映入眼帘的是@author Josh Bloch(相对于源码,本人更喜欢看故事 :D ,每次看到一份源码,先看看作者是谁。然后搜索一下作者的百科以及一些八卦。。。以及与作者相关的人的百科和一些八卦。。。以及。。。一上午就过去了...原创 2013-07-29 15:58:55 · 116 阅读 · 0 评论 -
Jdk1.6 JUC源码解析(15)-SynchronousQueue
Jdk1.6 JUC源码解析(15)-SynchronousQueue作者:大飞 功能简介:SynchronousQueue是一种特殊的阻塞队列,它本身没有容量,只有当一个线程从队列取数据的同时,另一个线程才能放一个数据到队列中,反之亦然。存取过程相当于一个线程把数据(安全的)交给另一个线程的过程。SynchronousQueue也支持公平和非公平模式。源码分析...原创 2015-10-26 19:19:10 · 139 阅读 · 0 评论 -
Jdk1.6 JUC源码解析(18)-DelayQueue
Jdk1.6 JUC源码解析(18)-DelayQueue作者:大飞 功能简介:DelayQueue是一种无界的阻塞队列,队列里只允许放入可以"延期"的元素,队列中列头的元素是最先"到期"的元素。如果队列中没有任何元素"到期",尽管队列中有元素,也不能从队列头获取到任何元素。源码分析:首先还是看一下内部数据结构:public class DelayQ...原创 2015-10-27 19:25:36 · 162 阅读 · 0 评论 -
Jdk1.6 JUC源码解析(22)-LinkedBlockingDeque
Jdk1.6 JUC源码解析(22)-LinkedBlockingDeque作者:大飞 功能简介:LinkedBlockingDeque是一种基于双向链表实现的有界的(可选的,不指定默认int最大值)阻塞双端队列。 双端队列一般适用于工作密取模式,即每个消费者都拥有自己的双端队列,如果某个消费者完成了自己队列的全部任务,可以到其他消费者双端队列尾部秘密获...原创 2015-10-29 18:47:49 · 153 阅读 · 0 评论 -
Jdk1.6 JUC源码解析(23)-CopyOnWriteArrayList、CopyOnWriteArraySet
Jdk1.6 JUC源码解析(23)-CopyOnWriteArrayList、CopyOnWriteArraySet作者:大飞 功能简介:CopyOnWriteArrayList是一种线程安全的ArrayList。顾名思义,有写操作时,就会copy一个新的内部数组出来替换掉旧的数组。这样做的好处是,遍历操作不用加锁了,但是遍历的数组不会感知即时变更,只是一个快照。在某些场...原创 2015-10-29 18:55:33 · 129 阅读 · 0 评论 -
Jdk1.6 JUC源码解析(24)-ConcurrentLinkedQueue
Jdk1.6 JUC源码解析(24)-ConcurrentLinkedQueue作者:大飞 功能简介:ConcurrentLinkedQueue是一种基于单向链表实现的无界的线程安全队列。队列中的元素遵循先入先出(FIFO)的规则。新元素插入到队列的尾部,从队列头部取出元素。ConcurrentLinkedQueue内部采用一种wait-free(无等待)算法来实现。...原创 2015-10-29 19:02:50 · 172 阅读 · 0 评论 -
Jdk1.6 集合框架源码解析汇总
Jdk1.6 集合框架源码解析汇总 非并发: Jdk1.6 Collections Framework源码解析(1)-ArrayList 描述:动态扩容的数组。 Jdk1.6 Collections Framework源码解析(2)-LinkedList 描述:双向链表。 Jdk...原创 2015-10-29 22:05:26 · 166 阅读 · 0 评论 -
Jdk1.6 JUC源码解析(25)-ConcurrentHashMap
Jdk1.6 JUC源码解析(25)-ConcurrentHashMap作者:大飞 功能简介:ConcurrentHashMap是一种线程安全的HashMap。相对于HashTable和Collections.synchronizedMap(),ConcurrentHashMap具有更好的性能和伸缩性,是由于其使用了分段锁的策略,将内部数据分为多个段,每个段单独加锁,而不...原创 2015-10-30 19:02:33 · 149 阅读 · 0 评论 -
Jdk1.6 JUC源码解析(26)-ConcurrentSkipListMap、ConcurrentSkipListSet
Jdk1.6 JUC源码解析(26)-ConcurrentSkipListMap、ConcurrentSkipListSet作者:大飞 功能简介:ConcurrentSkipListMap是一种线程安全的有序的Map。一般我们使用有序Map,不要求线程安全的情况下,可以使用TreeMap,要求线程安全的话,就可以使用ConcurrentSkipListMap。Conc...原创 2015-11-03 03:08:56 · 222 阅读 · 0 评论 -
Jdk1.6 Collections Framework源码解析(11)-EnumSet
Jdk1.6 Collections Framework源码解析(11)-EnumSet作者:大飞 功能简介:EnumSet是一种针对Enum类型提供的特殊的Set,每个EnumSet只能基于一个Enum类型来建立。EnumSet内部采用位域的方式建立(相当于bit数组),所以操作起来非常高效(几乎所有的基本操作都能在常数时间内完成),包括retainAll和reta...原创 2015-12-29 18:25:57 · 276 阅读 · 0 评论 -
Jdk1.6 JUC源码解析(14)-PriorityBlockingQueue
Jdk1.6 JUC源码解析(14)-PriorityBlockingQueue作者:大飞 功能简介:PriorityBlockingQueue是一种基于PriorityQueue实现的无界的阻塞队列。队列中的元素按照某种排序规则出队。插入队列的元素必须是可比较的。源码分析:首先看下PriorityBlockingQueue内部的数据结构: pu...原创 2015-10-25 03:22:36 · 112 阅读 · 0 评论 -
Jdk1.6 JUC源码解析(13)-LinkedBlockingQueue
Jdk1.6 JUC源码解析(13)-LinkedBlockingQueue作者:大飞 功能简介:LinkedBlockingQueue是一种基于单向链表实现的有界的(可选的,不指定默认int最大值)阻塞队列。队列中的元素遵循先入先出(FIFO)的规则。新元素插入到队列的尾部,从队列头部取出元素。(在并发程序中,基于链表实现的队列和基于数组实现的队列相比,往往具有更高的吞...原创 2015-10-24 22:28:15 · 134 阅读 · 0 评论 -
Jdk1.6 JUC源码解析(12)-ArrayBlockingQueue
Jdk1.6 JUC源码解析(12)-ArrayBlockingQueue作者:大飞 功能简介:ArrayBlockingQueue是一种基于数组实现的有界的阻塞队列。队列中的元素遵循先入先出(FIFO)的规则。新元素插入到队列的尾部,从队列头部取出元素。和普通队列有所不同,该队列支持阻塞操作。比如从空队列中取元素,会导致当前线程阻塞,直到其他线程将元素放入队列;将元...原创 2015-10-23 20:03:48 · 112 阅读 · 0 评论 -
Jdk1.6 Collections Framework源码解析(2)-LinkedList
ArrayList的插入和删除元素的操作会花费线性时间,那么有没有插入和删除元素比较省时的集合呢,看下LinkedList这个实现。 老样子,先看看它实现了那些接口。[code="java"]public class LinkedList extends AbstractSequentialList implements List, D...原创 2013-08-02 15:18:57 · 64 阅读 · 0 评论 -
Jdk1.6 Collections Framework源码解析(3)-ArrayDeque
表、栈和队列是三种基本的数据结构,前面总结的ArrayList和LinkedList可以作为任意一种数据结构来使用,当然由于实现方式的不同,操作的效率也会不同。 这篇要看一下java.util.ArrayDeque。从命名上看,它是一个由数组实现的双端队列。还是先看一下它实现了哪些接口。[code="java"]public class ArrayDequ...原创 2013-08-12 10:59:59 · 97 阅读 · 0 评论 -
Jdk1.6 Collections Framework源码解析(4)-HashMap
开发中常常会用到这样一种数据结构,根据一个关键字,找到所需的信息。这个过程有点像查字典,拿到一个key,去字典表中查找对应的value。Java1.0版本提供了这样的类java.util.Dictionary(抽象类),基本上支持字典表的操作。后来引入了Map接口,更好的描述的这种数据结构。 一个Map中会包含多个K-V对儿,Key不能重复。一个Key最多只能映射...原创 2013-08-19 13:59:00 · 91 阅读 · 0 评论 -
Jdk1.6 Collections Framework源码解析(5)-LinkedHashMap
前面总结了java.util.HashMap,这篇来看一下HashMap的一个子类——java.util.LinkedHashMap。 先读了一下源码的注释,首先LinkedHashMap中所有的Entry组成了一个双向链表,该链表定义了内部数据的迭代顺序,通常是按key插入的顺序(最近插入的放到链表的末尾,覆盖操作不会影响链表顺序)。LinkedHashMap还...原创 2013-08-20 14:28:37 · 96 阅读 · 0 评论 -
Jdk1.6 Collections Framework源码解析(6)-IdentityHashMap
这篇总结一下java.util.IdentityHashMap。从类名上可以猜到,这个类本质应该还是一个散列表,只是前面有Identity修饰,是一种特殊的HashMap。 简单的说,IdentityHashMap和HashMap的区别在于对key的比较。 HashMap中会调用key的hashCode方法,hashCode方法可能会根据具体情况...原创 2013-08-27 14:10:48 · 89 阅读 · 0 评论 -
Jdk1.6 Collections Framework源码解析(7)-HashSet、LinkedHashSet
本篇总结一下两个常用的集合类HashSet和LinkedHashSet。 它们都实现了相同接口java.util.Set。Set表示一种元素无序且不可重复的集合;之前总结过的java.util.List表示一种元素可重复且有序的集合。它们都扩展自java.util.Collection。[code="java"]public interface Set e...原创 2013-08-28 11:34:27 · 84 阅读 · 0 评论 -
Jdk1.6 Collections Framework源码解析(8)-WeakHashMap
总结这个类之前,首先看一下Java引用的相关知识。Java的引用分为四种:强引用、软引用、弱引用和虚引用。 [b]强引用:[/b]就是常见的代码中的引用,如Object o = new Object();存在强引用的对象不会被垃圾收集器回收。所以我们会在一些代码中看到显示切断强引用,以便回收相关对象的情况。[code="java"]public voi...原创 2013-09-02 11:43:04 · 78 阅读 · 0 评论 -
Jdk1.6 Collections Framework源码解析(9)-PriorityQueue
开发中有时会遇到这样的情况。要求某个调度器去调度一些任务,这些任务放在队列里。任务本身有优先级,调度器要按照优先级去调度队列里的任务,当然也会有新任务不断加入到队列中。 可以类比操作系统调度程序,操作系统要调度某个进程,简单的说会根据某种优先级进行调度(比如某些情况下,先执行时间较短的任务,保证短任务尽快结束。) 所以期望有这样一种数据结构,首先...原创 2013-09-03 20:37:48 · 115 阅读 · 0 评论 -
Jdk1.6 Collections Framework源码解析(10)-EnumMap
看这个类之前,先看一下Java的枚举——Enum。 枚举是啥?编码时我们经常需要写int型常量,在某些情况下(不是全部),用枚举更合适。举个例子,在程序中需要两个常量表示性别(男、女)。可能刚开始(JDK1.5之前)我们会这样写:[code="java"] /** * 男 */ public static final int MALE = ...原创 2013-09-09 14:55:03 · 88 阅读 · 0 评论 -
Jdk1.6 Collections Framework源码解析(12)-TreeMap、TreeSet
Jdk1.6 Collections Framework源码解析(12)-TreeMap、TreeSet作者:大飞 功能简介:TreeMap是一种有序的Map(K,V)容器,Key在容器中按照某种顺序排列,该顺序由给定的比较器或者Key自身的顺序来决定。在TreeMap内部,所有的Key由红黑树的结构组织而成,对TreeMap的常规操作:查找、插入和删除的平均时间复杂...原创 2016-01-03 16:06:32 · 201 阅读 · 0 评论