2024年3月6日
线程池核心组件图解 看源码之前,先了解一下该组件 最主要的几个 接口、抽象类和实现类的结构关系。 该组件中,Executor 和 ExecutorService 接口 定义了线程池最核心的几个方法,提交任务 submit ()、关闭线程池 shutdown()。抽象类 AbstractExecutorService 主要对公共行为 submit()系列方法进行了实现,这些 submit()……
阅读全文
2024年3月6日
TreeSet 是 Java 中实现有序集合的一个类,它基于红黑树实现,可以保证集合中的元素按照自然顺序或自定义顺序排序。在本文中,我们将详细介绍 TreeSet 的实现原理,并结合源码和示例代码进行解释。 TreeSet 的底层数据结构 TreeSet 的底层数据结构是红黑树,红黑树是一种自平衡二叉搜索树,它可以保证在插入、删除和查找元素时,时间复……
阅读全文
2024年3月6日
LinkedList LinkedList 是 Java 中实现双向链表的一个类,它实现了 List 接口和 Deque 接口。LinkedList 可以用作栈、队列和双端队列。在本文中,我们将详细介绍 LinkedList 的实现原理,并结合源码和示例代码进行解释。 LinkedList 的结点 LinkedList 的结点是一个静态内部类 Node,它包含三个属性:item 表示结点存储的元素,next 表示下一个结点……
阅读全文
2024年3月6日
HashMap 大家都清楚,底层是 数组 + (链表 / 红黑树),元素是无序的,而 LinkedHashMap 则比 HashMap 多了这一个功能,并且,LinkedHashMap 的有序可以按两种顺序排列,一种是按照插入的顺序,一种是按照访问的顺序(初始化 LinkedHashMap 对象时设置 accessOrder 参数为 true),而其内部是靠 建立一个双向链表 来维护这个顺序的,在每次插入……
阅读全文
2024年3月6日
HashSet 本身并没有什么特别的东西,它提供的所有集合核心功能,都是基于 HashMap 来实现的。如果了解 HashMap 源码的实现,HashSet 源码看起来跟玩一样。我的博客中有专门分析 HashMap 源码的文章,不熟悉的请自行翻阅。 HashSet 的特点如下: 内部使用 HashMap 的 key 存储元素,以此来保证元素不重复; HashSet 是无序的,因为 HashMap 的 key 是无序的; HashSet 中……
阅读全文
2024年3月6日
作为工作中最重要、最常用的容器之一,当然还是要自己动手写一篇 HashMap 的源码解析来加深对其的印象咯,而且它的设计与实现 也有很多值得学习的地方。 源码赏析 JDK1.8 的 HashMap 底层使用的是 动态数组,数组中元素存放的是 链表或红黑树。核心源码如下。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32……
阅读全文
2024年3月6日
HashMap 源码中主要了解其核心源码及实现逻辑。ConcurrentHashMap 就不再重复那些数据结构相关的内容咯,这里重点看一下它的并发安全实现。源码如下。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65……
阅读全文
2024年3月6日
一文直接带你吃透 ArrayList ArrayList 是日常开发中相当常见、面试也相当常考的一种 JDK 集合类,了解并熟悉、甚至能实现一个 ArrayList 对面试、提升自己编码功底大有益处。 一、写给小白 ArrayList 简单使用技巧 这部分是 ArrayList 的简单使用技巧,主要是介绍 ArrayList 的几个常见方法。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 /**……
阅读全文
2024年3月6日
前面我们分析了 Thread 类的源码,有了前面的铺垫,通过源码 理解 ThreadLocal 的秘密就容易多了。 ThreadLocal 类 提供了 get/set 线程局部变量的实现,ThreadLocal 成员变量与正常的成员变量不同,每个线程都可以通过 ThreadLocal 成员变量 get/set 自己的专属值。ThreadLocal 实例 通常是类中的私有静态变量,常用于将状态与线程关联,例……
阅读全文
2024年3月6日
本来想看 ThreadLocal 的源码的,但发现其中最重要的 get/set 方法都是操纵的 Thread 类 中的 threadLocals 变量 (java.lang.ThreadLocal.ThreadLocalMap),索性先来看一下 Thread 的源码吧,可以留意一下其中与 ThreadLocal 相关的属性,这样下次阅读 ThreadLocal 的核心 API 时,就能够轻易理解其原理咯。不多 BB,直接上硬菜。 实现……
阅读全文