
集合
芝麻开花不开门
这个作者很懒,什么都没留下…
展开
-
Collection集合与Map集合体系
Java集合大致可以分为Set、List、Queue、Map四种体系,其中set代表无序、不可重复的集合;List代表有序、重复的集合;Map代表具有映射关系的集合;Java5增加的Queue体系代表一种队列集合实现。Java的集合类主要由两个接口派生而出:Collection和Map,Collection和Map是Java集合框架的根接口,这两个接口又包含了一些子接口和实现类。 Collec...原创 2019-09-08 09:56:17 · 706 阅读 · 0 评论 -
LinkedHashMap特点(jdk1.8)
结束上篇的HashMap扩容分析,今天来聊聊LinkedHashMap的特点,继承了HashMap类(以下都是基于jdk1.8)。之前简单聊过LinkedHashSet的特点,它的底层实际就是使用的LinkedHashMap。 继承树LinkedHashMap的继承树如下图: 特点(1)由于继承HashMap类,所以默认初始容量是16,加载因子是0.75。accessOrder为fals...原创 2019-10-08 16:20:34 · 559 阅读 · 0 评论 -
深入理解HashMap扩容(JDK1.8)---源码分析
HashMap有自动扩容机制,那么它是如何扩容的?本篇带你跟着源码一步步走近。以下都是基于jdk1.8的。 Let's start从HashMap的put方法入手,逐步深入: /** * Associates the specified value with the specified key in this map. * If the map previously co...原创 2019-10-07 19:54:42 · 1238 阅读 · 4 评论 -
HashMap指定初始容量的构造函数-基于源码分析
今日主题是源码分析之HashMap指定初始容量的构造函数(以下都是基于jdk1.8)。HashMap可以指定初始容量大小的构造函数有两个: /** * The maximum capacity, used if a higher value is implicitly specified * by either of the constructors with arg...原创 2019-09-15 09:18:20 · 576 阅读 · 0 评论 -
HashMap常量设计目的
HashMap中有哪些常量?这些常量设计的目的是什么?本篇带你走近Doug Lea、Josh Bloch、Arthur van Hoff、 Neal Gafter对HashMap的设计。(以下都是基于jdk1.8) 常量设计(1)HashMap默认初始化大小是1 << 4(即16) /** * The default initial capacity - MUST...原创 2019-09-14 17:23:50 · 566 阅读 · 3 评论 -
HashMap类注释解析
结束了Collection集合的summary,现在先来看看Map集合下的HashMap的类注释。以下都是基于jdk1.8的。 继承树HashMap继承树如下图:HashMap类注释解析(1)HashMap是基于Map接口实现的,它提供了Map中所有的操作,并且允许key和value为null。HashMap跟HashTable基本一样,只是HashMap是线程不安全的,并且HashMa...原创 2019-09-12 11:28:28 · 416 阅读 · 0 评论 -
Vector扩容机制源码分析
再来稍微聊一下Vector的特点。 继承树Vector继承树如下图:特点(1)允许null值(2)底层使用动态对象数组Object[] elementData(3)默认初始容量是10(4)线程安全,通过synchronized锁得以保证(5)fail-fast机制...原创 2019-09-12 08:28:32 · 666 阅读 · 0 评论 -
LinkedList特点
聊一聊LinkedList的特点吧~(以下都是基于jdk1.8) 继承树LinkedList的继承树如下图:特点(1)允许null值(2)内部以双向链表的形式来保存集合中的元素 /** * Pointer to first node. * Invariant: (first == null && last == null) || * ...原创 2019-09-11 20:17:50 · 4336 阅读 · 0 评论 -
ArrayList源码分析(jdk1.8)
聊一聊ArrayList的特点吧~(以下都是基于jdk1.8) 继承树ArrayList的继承树如下图: 特点(1)底层使用动态数组Object[] elementData 来保存所有元素(2)线程不安全。可通过如下方式使用线程安全的操作:List list = Collections.synchronizedList(new ArrayList(...));(3)默认初始容量...原创 2019-09-11 20:02:48 · 269 阅读 · 0 评论 -
PriorityQueue特点-基于源码分析
愉快地聊一聊PriorityQueue的特点吧~(以下都是基于jdk1.8) 一棵树PriorityQueue的继承树如下图: 基本特点(1)双端队列,可从两端添加、删除元素。作为队列使用时,性能优于LinkedList。作为栈使用时,性能优于Stack。(2)底层使用可变数组Object[] elements, 数组容量按需增长(3)不能存储null(4)支持双向迭代器遍历(5...原创 2019-09-11 15:30:47 · 407 阅读 · 0 评论 -
ArrayDeque源码分析
愉快地聊一聊ArrayDeque的特点吧~(以下都是基于jdk1.8) 一棵树ArrayDeque的继承树如下图: 基本特点(1)双端队列,可从两端添加、删除元素。作为队列使用时,性能优于LinkedList。作为栈使用时,性能优于Stack。(2)底层使用可变数组Object[] elements, 数组容量按需增长(3)不能存储null(4)支持双向迭代器遍历(5)线程不安全...原创 2019-09-10 16:01:26 · 284 阅读 · 0 评论 -
TreeSet特点
聊一聊TreeSet的特点吧~(以下都是基于jdk1.8) 继承树TreeSet的继承树如下图: 特点(1)底层使用TreeMap来保存所有元素(2)线程不安全。可通过如下方式使用线程安全的操作:SortedSet s = Collections.synchronizedSortedSet(new TreeSet(...));(3)能够确保集合元素处于排序状态,依赖于compar...原创 2019-09-08 20:09:17 · 1168 阅读 · 0 评论 -
LinkedHashSet源码分析
今天来聊聊LinkedHashSet,继承了HashSet类,基于LinkedHashMap来实现(以下都是基于jdk1.8)。 继承树LinkedHashSet的继承树如下图: 源码之旅(1)底层基于LinkedHashMap实现,默认初始容量是16,加载因子是0.75 public LinkedHashSet() { super(16, .75f, tr...原创 2019-09-08 17:52:39 · 519 阅读 · 0 评论 -
HashSet部分源码分析
今天来简单讲讲HashSet,因为HashSet实际上是基于HashMap来实现的,底层使用HashMap来保存集合元素,关于HashMap会在接下来的博客中加以介绍,所以这次HashSet就简单写一写了。(以下都是基于jdk1.8) 继承树HashSet的继承树如下图: 类注释解析(1)基于HashMap实现,不能保证集合的迭代顺序;特别是它不能保证元素的顺序不随时间而改变。且允...原创 2019-09-08 17:09:23 · 193 阅读 · 0 评论 -
HashTable特点(jdk1.8)
简单写一写HashTable的特点~继承树HashTable的继承树如下图: 特点(1)底层使用Entry数组保存元素(2)默认初始容量是11,加载因子是0.75。 /** * Constructs a new, empty hashtable with a default initial capacity (11) * and load factor (0...原创 2019-10-08 21:09:56 · 734 阅读 · 0 评论