随笔分类 - 01. 集合源码入门教程
摘要:![](https://www-shuyi-me.oss-cn-shenzhen.aliyuncs.com/15549687342183.jpg)
阅读全文
摘要:TreeMap 是 Map 集合的有序实现,其底层是基于红黑树的实现,能够早 log(n) 时间内完成 get、put 和 remove 操作。 TreeMap 继承自 AbstractMap,还实现了 NavigableMap接口。NavigableMap 接口继承了SortedMap接口,Sor
阅读全文
摘要:WeakedHashMap 也是 Map 集合的哈希实现,但其余 HashMap 的不同之处在于。其每个节点的 value 引用是弱引用,可以方便 GC 回收。 从 WeakHashMap 的定义来看,WeakHashMap 并没有继承 HashMap,这就意味着 WeakHashMap 必须自己重
阅读全文
摘要:HashMap 是 Map 基于哈希散列算法的实现,其在 JDK1.7 中采用了数组+链表的数据结构。在 JDK1.8 中为了提高查询效率,采用了数组+链表+红黑树的数据结构。本文所有讲解均基于 JDK1.8 进行讲解。 从上面 HashMap 的定义可以看出,其继承了 AbstractMap,实现
阅读全文
摘要:我们之前说过 LinkedHashMap 是在 HashMap 的基础上,增加了对插入元素的链表维护。那么其到底是怎么实现的呢?今天这篇文章就带我们来一探究竟。 LinkedHashMap 的声明比较简单,继承了 HashMap 类,实现了 Map 接口。 原理 我们将从类成员变量、构造方法、核心方
阅读全文
摘要:从名字我们可以看出,其实一个双向队列实现,而且底层采用数组实现。 从定义可以看出,其实现了 Deque 接口。 原理 为了深入理解 ArrayDeque 的原理,我们将从类成员变量、构造方法、核心方法两个方面逐一介绍。 类成员变量 从类成员变量我们就可以知道,其底层确实使用数组存储。 构造方法 Ar
阅读全文
摘要:我们之前在说到 List 集合的时候已经说过 LinkedList 了。但 LinkedList 不仅仅是一个 List 集合实现,其还是一个双向队列实现。 LinkedList 不仅实现了 List 接口,还实现了 Deque 接口。所以这一节我们来聊聊 LinkedList 的双向队列特性。 原
阅读全文
摘要:PriorityQueue 是一个优先级队列,其底层原理采用二叉堆实现。我们先来看看它的类声明: PriorityQueue 继承了 AbstractQueue 抽象类,具有队列的基本特性。 二叉堆 由于 PriorityQueue 底层采用二叉堆来实现,所以我们有必要先介绍下二叉堆。 二叉堆从结构
阅读全文
摘要:TreeSet 是 Set 集合的红黑树实现,但其内部并没有具体的逻辑,而是直接使用 TreeMap 对象实现。我们先来看看 TreeSet 的定义。 可以看到 TreeSet 实现了 NavigableSet 接口,而 NavigableSet 接口又继承了 接口。SortedSet 接口又继承了
阅读全文
摘要:LinkedHashSet 继承了 HashSet,在此基础上维护了元素的插入顺序。 原理 LinkedHashSet 的源码非常简单,只有简单的四4个构造方法。 但我们不是说 HashSet 还维护了元素的插入顺序么?那这部分代码写在哪里呢? 这里我们要注意一个细节,即 LinkedHashSet
阅读全文
摘要:HashSet 是 Set 集合的哈希实现,其继承了 AbstractSet 抽象类,并实现了 Set 接口。 原理 为了深入理解 HashSet 的原理,我们将从类成员变量、构造方法、核心方法两个方面逐一介绍。 类成员变量 从类成员变量我们可以知道,HashSet 内部使用 HashMap 存储,
阅读全文
摘要:Stack 是先进后出的栈结构,其并不直接实现具体的逻辑,而是通过继承 Vector 类,调用 Vector 类的方法实现。 核心方法 Stack 类代码非常简单,其有 3 个核心方法:push、pop、peek。 push 可以看到 push 方法直接调用 Vector 的 addElement
阅读全文
摘要:Vector 的底层实现以及结构与 ArrayList 完全相同,只是在某一些细节上会有所不同。这些细节主要有: 线程安全 扩容大小 线程安全 我们知道 ArrayList 是线程不安全的,只能在单线程环境下使用。而 Vector 则是线程安全的,那么其实怎么实现的呢? 其实 Vector 的实现很
阅读全文
摘要:LinkedList 是链表的经典实现,其底层采用链表节点的方式实现。 从类继承结构图可以看到,LinkedList 不仅实现了 List 接口,还实现了 Deque 双向队列接口。 原理 为了深入理解 LinkedList 的原理,我们将从类成员变量、构造方法、核心方法两个方面逐一介绍。 类成员变
阅读全文
摘要:ArrayList 是 List 集合的列表经典实现,其底层采用定长数组实现,可以根据集合大小进行自动扩容。 原理 为了深入理解 ArrayList 的原理,我们将从类成员变量、构造方法、核心方法两个方面逐一介绍。 类成员变量 构造方法 ArrayList 一共有 3 个构造方法: 从第一个构造方法
阅读全文
摘要:集合系列(一):集合框架概述 Java 集合是 Java API 用得最频繁的一类,掌握 Java 集合的原理以及继承结构非常有必要。总的来说,Java 容器可以划分为 4 个部分: List 集合 Set 集合 Queue 集合 Map 集合 除了上面 4 种集合之外,还有一个专门的工具类: 工具
阅读全文
摘要:集合可以说是学习 Java 中最重要的一块知识点了,无论做任何业务系统,集合总是最为基础的那块 API。我第一次接触集合,是在我大三的时候,那时候去面试,面试官问我:你了解过集合吗?可惜那时候没什么项目经验,所以基本没有了解过,因此也错失了机会。 到了现在,我已经工作了5年了,也做过了大大小小十几个
阅读全文
摘要:转载自: "LinkedList 源码分析(JDK 1.8)" 概述 LinkedList 是 Java 集合框架中一个重要的实现,其底层采用的双向链表结构。和 ArrayList 一样,LinkedList 也支持空值和重复值。由于 LinkedList 基于链表实现,存储元素过程中,无需像 Ar
阅读全文
摘要:转载自: "ArrayList 源码分析" 概述 ArrayList 是一种变长的集合类,基于定长数组实现。ArrayList 允许空值和重复元素,当往 ArrayList 中添加的元素数量大于其底层数组容量时,其会通过扩容机制重新生成一个更大的数组。另外,由于 ArrayList 底层基于数组实现
阅读全文
摘要:转载自: "疫苗:JAVA HASHMAP的死循环" 在淘宝内网里看到同事发了贴说了一个CPU被100%的线上故障,并且这个事发生了很多次,原因是在Java语言在并发情况下使用HashMap造成Race Condition,从而导致死循环。这个事情我4、5年前也经历过,本来觉得没什么好写的,因为Ja
阅读全文