一知半解Java源码系列
探索 Java 源码,了解 Java 底层实现
荆轲刺秦
欢迎关注我的个人微信公众号:我与风来;
谦虚,别浮躁;好学,别懒惰;律己,别拖延。
展开
-
手撕同步工具类源码(一)
想和你聊聊 CountDownLatch 和 CyclicBarrier 如何实现的!原创 2020-06-03 20:28:34 · 190 阅读 · 0 评论 -
手撕AQS之Condition
从源码剖析,带你看看 AQS 的 Condition 如何实现!原创 2020-05-16 18:14:02 · 168 阅读 · 0 评论 -
手撕AQS之独占锁模式
写在前面AQS 也是在来来回回看了源码好多遍,才有所理解。原本打算就这一篇写完,点到即止,但不知觉的又深入了,无法抗拒的代码魅力啊!所以分为两篇,一篇共享式,一篇独占式,美滋滋呢。共享式已写好,共享式中有关于我个人对 AQS 的理解,这篇独占式就直接分析源码了。这里分享一种很有用的断点源码的方式:那就是使用 Intellij 的书签,本身在调试源码的时候,很容易就乱掉层次,通过书签,我们可以...原创 2020-03-23 08:36:26 · 168 阅读 · 0 评论 -
手撕AQS之共享锁模式
写在前面AQS 也是在来来回回看了源码好多遍,才有所理解。原本打算就这一篇写完,点到即止,但不知觉的又深入了,无法抗拒的代码魅力啊!所以分为两篇,一篇共享式,一篇独占式,美滋滋呢。什么是 AQSAQS 全称 AbstractQueuedSynchronizer ,从类名可以知道,它是一个抽象类,并且可能维护了队列,最主要的作用是作为同步器。在 JUC 包下,很多同步工具类使用了它,使用的...原创 2020-02-29 17:57:49 · 323 阅读 · 1 评论 -
手撕TreeSet
TreeSet 能够按照指定的比较方式来排序元素,它的底层实现是维护了一个 NavigableMap对象,该对象的实现是使用了 TreeMap 类。TreeSet 继承自 AbstractSet 类,实现了 NavigableSet 接口,NavigableSet 接口又继承了 SortedSet 接口。它这样的类结构与 TreeMap 相似,TreeMap 实现了 NavigableMap 接...原创 2020-02-05 17:16:15 · 131 阅读 · 1 评论 -
手撕LinkedHashSet
LinkedHashSet 能够维护元素插入集合的顺序,在遍历时,按照此顺序进行遍历。LinkedHashSet 继承了 HashSet 类,实现了 Set 等接口。LinkedHashSet 仍然支持 null 元素,唯一有所区别的是在迭代时,它能够按照元素的插入顺序遍历。LinkedHashSet 的实现非常简单,它仅仅只重新实现了构造方法,将 HashSet 内部维护的 HashMap...原创 2020-02-05 15:43:23 · 252 阅读 · 0 评论 -
手撕HashSet
HashSet 实现 Set 接口,内部维护一个 HashMap 实例。它不能保证集合迭代的顺序,也不能保证顺序不变。HashSet 允许 null 元素。该类对于基本操作,例如 add、remove、contains 和 size提供了常数时间的性能,迭代器的性能与 HashSet 实例的大小加上内部维护的 HashMap 的“容量”(即桶的数量)之和有关。所以,如果迭代性能很重要的话,并不建...原创 2020-02-03 16:41:40 · 163 阅读 · 0 评论 -
手撕LinkedList
LinkedList 底层数据结构是双向链表,可以存储任何元素(包括 null)。它也实现了 Deque 接口,可以将它当做双向队列使用。初始化它并没有任何初始化。双向链表依靠 first 和 last 两个节点维护: /** * Pointer to first node. * Invariant: (first == null && last =...原创 2020-01-04 12:02:47 · 243 阅读 · 0 评论 -
手撕ArrayList
ArrayList 能够存储元素,并支持按索引访问。它的底层结构是数组,那么它的扩容策略是怎样?初始化查看构造函数: public ArrayList(int initialCapacity) { if (initialCapacity > 0) { this.elementData = new Object[initialCapacity];...原创 2020-01-04 12:01:25 · 166 阅读 · 0 评论 -
手撕TreeMap
简要叙述了 TreeMap 的实现。原创 2020-01-04 09:34:36 · 138 阅读 · 0 评论 -
手撕LinkHashMap
通过底层源码详细地分析了 LinkedHashMap 的实现。原创 2020-01-01 13:16:00 · 259 阅读 · 0 评论 -
手撕HashMap迭代器
详细描述了 HashMap 迭代器的实现。原创 2019-12-30 19:32:51 · 421 阅读 · 0 评论 -
手撕HashMap红黑树
结合红黑树算法,介绍了底层 HashMap 树型化相关的操作。原创 2019-12-30 19:33:26 · 853 阅读 · 0 评论 -
手撕Java类HashMap
本文分析了 java 8 中的 HashMap 类,解释了其存取操作源码以及扩容的源码。原创 2019-12-27 17:54:01 · 259 阅读 · 0 评论 -
手撕Java类 ReentrantLock
详细的介绍了 ReentrantLock 的用法,以及一些需要注意的问题,例如 tryLock 将打破公平策略等。原创 2019-09-26 18:51:12 · 108 阅读 · 0 评论 -
手撕Java类 ThreadLocal
从底层实现解释了 ThreadLocal 为什么是线程安全的。原创 2019-09-21 09:25:46 · 134 阅读 · 0 评论 -
手撕Java类 Collector
简单分析了 Collector 的用法。原创 2019-08-09 16:46:30 · 283 阅读 · 0 评论