Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/diguage/jdk-source-analysis
JDK 源码分析
https://github.com/diguage/jdk-source-analysis
java jdk source-code
Last synced: 1 day ago
JSON representation
JDK 源码分析
- Host: GitHub
- URL: https://github.com/diguage/jdk-source-analysis
- Owner: diguage
- License: apache-2.0
- Created: 2016-10-31T02:55:40.000Z (about 8 years ago)
- Default Branch: master
- Last Pushed: 2024-05-27T13:20:03.000Z (6 months ago)
- Last Synced: 2024-10-30T02:36:00.241Z (15 days ago)
- Topics: java, jdk, source-code
- Language: Java
- Homepage: https://www.diguage.com
- Size: 6.76 MB
- Stars: 263
- Watchers: 30
- Forks: 101
- Open Issues: 8
-
Metadata Files:
- Readme: README.adoc
- License: LICENSE
Awesome Lists containing this project
README
= JDK & STL 源码分析计划
ifdef::env-github[]
:tip-caption: :bulb:
:note-caption: :information_source:
:important-caption: :heavy_exclamation_mark:
:caution-caption: :fire:
:warning-caption: :warning:
endif::[]为了学好数据结构以及相关算法,同时也为了更好地理解 JDK 的底层实现,计划对 JDK 集合类的源码做一个系统的阅读分析。
欢迎随时提交 PR 或 Issue。或者关注我的微信公众号,给我发消息。
浏览请点击: https://diguage.github.io/jdk-source-analysis/[JDK 源码分析]。
WARNING: 本文档基于 *OpenJDK 17* 的代码开展分析,请 PR 的小伙伴使用相同版本的 JDK。谢谢!
=== 友情支持
如果您觉得这个笔记对您有所帮助,看在D瓜哥码字的辛苦上,请友情支持一下,D瓜哥感激不尽,😜
[cols="2*^",frame=none]
|===
| image:docs/images/alipay.png[title="支付宝", alt="支付宝", width="90%"] | image:docs/images/wxpay.png[title="微信", alt="微信", width="90%"]
|===有些打赏的朋友希望可以加个好友,欢迎关注D瓜哥的微信公众号,这样就可以通过公众号的回复直接给我发信息。
image::docs/images/wx-jikerizhi.png[align="center",width=90%]
TIP: **公众号的微信号是: `jikerizhi`**。__因为众所周知的原因,有时图片加载不出来。如果图片加载不出来可以直接通过搜索微信号来查找我的公众号。__
=== 官网及版本库
本文档的版本库托管在 Github 上,另外单独发布。
“地瓜哥”博客网:: https://www.diguage.com/[^] 。D瓜哥的个人博客。欢迎光临,不过,内容很杂乱,请见谅。不见谅,你来打我啊,😂😂
本文档官网:: https://diguage.github.io/jdk-source-analysis/[^] 。为了方便阅读,这里展示了处理好的文档。阅读请点击这个网址。
本文档版本库:: https://github.com/diguage/jdk-source-analysis[^] 。欢迎大家发送 PR。== 总体思路
. 学习基本的数据结构认识。兵马未动粮草先行。先把基础理论搞清楚。
.. 学Java的,可以从下面两本书中选一本:
... https://book.douban.com/subject/26745780/[数据结构与算法分析] -- 这本书的优点在于和 Java JDK 的集合类很贴近。
... https://book.douban.com/subject/19952400/[算法(第4版)] -- 这本书胜在图很多。
.. 学 C/C++ 的,可以看下面这套书:
... https://book.douban.com/subject/4065258/[算法:C语言实现 (第1~4部分)]
... https://book.douban.com/subject/4191525/[算法:C语言实现 (第5部分)]
. 自己实现一遍基本的数据结构;
. 阅读 JDK 或 STL 源码,做学习笔记。
+
TIP: 对比一下自己的实现和这些经典代码的实现,总结自己差距,提高自己的编码能力。
+
.. https://book.douban.com/subject/1110934/[STL源码剖析 ] -- 阅读源码时,建议参考一下本书的内容。
.. 建议把网上的源码分析笔记都看一看,取长补短,补充自己的分析。
.. 建议把网上相关面试题也看一看,检验自己的学习成果。
. 相关联的 LeetCode 上的题都刷掉。[NOTE]
====
还有两个想法:. 可以把 Redis 的实现也过一下,Redis 实现也有很多不错的思路。毕竟 Redis 是目前最常用的缓存解决方案。
. Java 中有很多针对集合类做扩展的库,可以一并学了,这样就能更清楚了解 Java JDK 实现的不足,开阔自己的眼界:
.. https://github.com/google/guava[google/guava: Google core libraries for Java]
.. https://commons.apache.org/proper/commons-collections/[Apache Commons Collections]
.. https://www.eclipse.org/collections/[Eclipse Collections - Features you want with the collections you need.]
====== JDK 集合类
*Base + Iterator*::
代码总行数: 103 + 135 + 302 + 195 + 838 + 127 + 734 + 480 = 2914 行,预计 5 个小时。
. `java.lang.Iterable`
. `java.util.Iterator`
. `java.util.PrimitiveIterator`
. `java.util.ListIterator`
. `java.util.Spliterator`
. `java.util.Enumeration`
. `java.util.Collection`
. `java.util.AbstractCollection`*List*::
代码总行数: 1063 + 942 + 253 + 1266 + 1509 + 141 + 1759 = 6933 行,预计 12 个小时。
. `java.util.List`
. `java.util.AbstractList`
. `java.util.AbstractSequentialList`
. `java.util.LinkedList`
. `java.util.Vector`
. `java.util.Stack`
. `java.util.ArrayList`*Queue*::
代码总行数: 212 + 616 + 192 + 1233 + 987 = 3240 行,预计 6 个小时。
. `java.util.Queue`
. `java.util.Deque`
. `java.util.AbstractQueue`
. `java.util.ArrayDeque`
. `java.util.PriorityQueue`*Set*::
代码总行数: 732 + 186 + 264 + 491 + 323 + 361 + 560 + 195 + 1395 = 4507 行,预计 8 个小时。
. `java.util.Set`
. `java.util.AbstractSet`
. `java.util.SortedSet`
. `java.util.EnumSet`
. `java.util.NavigableSet`
. `java.util.HashSet`
. `java.util.TreeSet`
. `java.util.LinkedHashSet`
. `java.util.BitSet`image::./docs/images/java.util.Collection.png[]
*Map*::
代码总行数: 1687 + 284 + 424 + 857 + 3012 + 1339 + 812 + 1600 + 756 + 2444 + 155 + 1521 = 14891 行,预计 28 个小时。
. `java.util.Map`
. `java.util.SortedMap`
. `java.util.NavigableMap`
. `java.util.AbstractMap`
. `java.util.TreeMap`
. `java.util.WeakHashMap`
. `java.util.EnumMap`
. `java.util.IdentityHashMap`
. `java.util.LinkedHashMap`
. `java.util.HashMap`
. `java.util.Dictionary`
. `java.util.Hashtable`image::./docs/images/java.util.Map.png[]
来张总体结构图:
image::./docs/images/jdk-collection-classes.png[]
TIP: 这里没有包含并发相关的集合类。这块内容放到并发中一起搞。
== 目录结构介绍
[source]
----
.
├── LICENSE
├── README.adoc
├── pom.xml
├── docs -- 这里存放阅读源码的文档。
│ └── images -- 这里存放相关图片
└── src
├── main
│ └── java
│ └── com
│ └── diguage
│ └── truman
│ └── App.java
└── test
└── java
└── com
└── diguage
└── truman -- 这个目录存放相关测试代码。
└── AppTest.java
----== 源码列表
查看文档,请移步: https://diguage.github.io/jdk-source-analysis[JDK 源码分析]。
* [x] link:./docs/java.util.Iterator.adoc[迭代器 Iterator、Enumeration、Spliterator 与 Iterable]
* [ ] link:./docs/java.util.PrimitiveIterator.adoc[java.util.PrimitiveIterator]
* [ ] link:./docs/java.util.ListIterator.adoc[java.util.ListIterator]
* [ ] link:./docs/java.util.Spliterator.adoc[java.util.Spliterator]
* [ ] link:./docs/java.util.Collection.adoc[java.util.Collection]
* [ ] link:./docs/java.util.AbstractCollection.adoc[java.util.AbstractCollection]
* [ ] link:./docs/java.util.List.adoc[java.util.List]
* [ ] link:./docs/java.util.AbstractList.adoc[java.util.AbstractList]
* [ ] link:./docs/java.util.AbstractSequentialList.adoc[java.util.AbstractSequentialList]
* [ ] link:./docs/java.util.LinkedList.adoc[java.util.LinkedList]
* [ ] link:./docs/java.util.Vector.adoc[java.util.Vector]
* [ ] link:./docs/java.util.Stack.adoc[java.util.Stack]
* [ ] link:./docs/java.util.ArrayList.adoc[java.util.ArrayList]
* [ ] link:./docs/java.util.Queue.adoc[java.util.Queue]
* [ ] link:./docs/java.util.Deque.adoc[java.util.Deque]
* [ ] link:./docs/java.util.AbstractQueue.adoc[java.util.AbstractQueue]
* [ ] link:./docs/java.util.ArrayDeque.adoc[java.util.ArrayDeque]
* [ ] link:./docs/java.util.PriorityQueue.adoc[java.util.PriorityQueue]
* [ ] link:./docs/java.util.Set.adoc[java.util.Set]
* [ ] link:./docs/java.util.AbstractSet.adoc[java.util.AbstractSet]
* [ ] link:./docs/java.util.SortedSet.adoc[java.util.SortedSet]
* [ ] link:./docs/java.util.EnumSet.adoc[java.util.EnumSet]
* [ ] link:./docs/java.util.NavigableSet.adoc[java.util.NavigableSet]
* [ ] link:./docs/java.util.HashSet.adoc[java.util.HashSet]
* [ ] link:./docs/java.util.TreeSet.adoc[java.util.TreeSet]
* [ ] link:./docs/java.util.LinkedHashSet.adoc[java.util.LinkedHashSet]
* [ ] link:./docs/java.util.BitSet.adoc[java.util.BitSet]
* [ ] link:./docs/java.util.Map.adoc[java.util.Map]
* [ ] link:./docs/java.util.SortedMap.adoc[java.util.SortedMap]
* [ ] link:./docs/java.util.NavigableMap.adoc[java.util.NavigableMap]
* [ ] link:./docs/java.util.AbstractMap.adoc[java.util.AbstractMap]
* [ ] link:./docs/java.util.TreeMap.adoc[java.util.TreeMap]
* [ ] link:./docs/java.util.WeakHashMap.adoc[java.util.WeakHashMap]
* [ ] link:./docs/java.util.EnumMap.adoc[java.util.EnumMap]
* [ ] link:./docs/java.util.IdentityHashMap.adoc[java.util.IdentityHashMap]
* [ ] link:./docs/java.util.LinkedHashMap.adoc[java.util.LinkedHashMap]
* [ ] link:./docs/java.util.HashMap.adoc[java.util.HashMap]
* [ ] link:./docs/java.util.Dictionary.adoc[java.util.Dictionary]
* [ ] link:./docs/java.util.Hashtable.adoc[java.util.Hashtable]