{"id":15069317,"url":"https://github.com/diguage/jdk-source-analysis","last_synced_at":"2025-04-12T03:49:21.679Z","repository":{"id":53056519,"uuid":"72393193","full_name":"diguage/jdk-source-analysis","owner":"diguage","description":"JDK 源码分析","archived":false,"fork":false,"pushed_at":"2025-03-14T09:05:51.000Z","size":7252,"stargazers_count":269,"open_issues_count":6,"forks_count":99,"subscribers_count":29,"default_branch":"master","last_synced_at":"2025-04-12T03:49:15.900Z","etag":null,"topics":["java","jdk","source-code"],"latest_commit_sha":null,"homepage":"https://www.diguage.com","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/diguage.png","metadata":{"files":{"readme":"README.adoc","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2016-10-31T02:55:40.000Z","updated_at":"2025-04-03T01:27:10.000Z","dependencies_parsed_at":"2024-01-07T15:32:49.192Z","dependency_job_id":"8e36be01-9883-40bb-ac7b-22b3a2e369b2","html_url":"https://github.com/diguage/jdk-source-analysis","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/diguage%2Fjdk-source-analysis","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/diguage%2Fjdk-source-analysis/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/diguage%2Fjdk-source-analysis/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/diguage%2Fjdk-source-analysis/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/diguage","download_url":"https://codeload.github.com/diguage/jdk-source-analysis/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248514210,"owners_count":21116899,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["java","jdk","source-code"],"created_at":"2024-09-25T01:41:46.090Z","updated_at":"2025-04-12T03:49:21.658Z","avatar_url":"https://github.com/diguage.png","language":"Java","readme":"= JDK \u0026 STL 源码分析计划\n\nifdef::env-github[]\n:tip-caption: :bulb:\n:note-caption: :information_source:\n:important-caption: :heavy_exclamation_mark:\n:caution-caption: :fire:\n:warning-caption: :warning:\nendif::[]\n\n为了学好数据结构以及相关算法，同时也为了更好地理解 JDK 的底层实现，计划对 JDK 集合类的源码做一个系统的阅读分析。\n\n欢迎随时提交 PR 或 Issue。或者关注我的微信公众号，给我发消息。\n\n浏览请点击： https://diguage.github.io/jdk-source-analysis/[JDK 源码分析]。\n\nWARNING: 本文档基于 *OpenJDK 17* 的代码开展分析，请 PR 的小伙伴使用相同版本的 JDK。谢谢！\n\n=== 友情支持\n\n如果您觉得这个笔记对您有所帮助，看在D瓜哥码字的辛苦上，请友情支持一下，D瓜哥感激不尽，😜\n\n[cols=\"2*^\",frame=none]\n|===\n| image:docs/images/alipay.png[title=\"支付宝\", alt=\"支付宝\", width=\"90%\"] | image:docs/images/wxpay.png[title=\"微信\", alt=\"微信\", width=\"90%\"]\n|===\n\n有些打赏的朋友希望可以加个好友，欢迎关注D瓜哥的微信公众号，这样就可以通过公众号的回复直接给我发信息。\n\nimage::docs/images/wx-jikerizhi.png[align=\"center\",width=90%]\n\nTIP: **公众号的微信号是: `jikerizhi`**。__因为众所周知的原因，有时图片加载不出来。如果图片加载不出来可以直接通过搜索微信号来查找我的公众号。__\n\n=== 官网及版本库\n\n本文档的版本库托管在 Github 上，另外单独发布。\n\n“地瓜哥”博客网:: https://www.diguage.com/[^] 。D瓜哥的个人博客。欢迎光临，不过，内容很杂乱，请见谅。不见谅，你来打我啊，😂😂\n本文档官网:: https://diguage.github.io/jdk-source-analysis/[^] 。为了方便阅读，这里展示了处理好的文档。阅读请点击这个网址。\n本文档版本库::  https://github.com/diguage/jdk-source-analysis[^] 。欢迎大家发送 PR。\n\n== 总体思路\n\n. 学习基本的数据结构认识。兵马未动粮草先行。先把基础理论搞清楚。\n.. 学Java的，可以从下面两本书中选一本：\n... https://book.douban.com/subject/26745780/[数据结构与算法分析] -- 这本书的优点在于和 Java JDK 的集合类很贴近。\n... https://book.douban.com/subject/19952400/[算法（第4版）] -- 这本书胜在图很多。\n.. 学 C/C++ 的，可以看下面这套书：\n... https://book.douban.com/subject/4065258/[算法：C语言实现 (第1～4部分)]\n... https://book.douban.com/subject/4191525/[算法：C语言实现 （第5部分）]\n. 自己实现一遍基本的数据结构；\n. 阅读 JDK 或 STL 源码，做学习笔记。\n+\nTIP: 对比一下自己的实现和这些经典代码的实现，总结自己差距，提高自己的编码能力。\n+\n.. https://book.douban.com/subject/1110934/[STL源码剖析 ] -- 阅读源码时，建议参考一下本书的内容。\n.. 建议把网上的源码分析笔记都看一看，取长补短，补充自己的分析。\n.. 建议把网上相关面试题也看一看，检验自己的学习成果。\n. 相关联的 LeetCode 上的题都刷掉。\n\n[NOTE]\n====\n还有两个想法：\n\n. 可以把 Redis 的实现也过一下，Redis 实现也有很多不错的思路。毕竟 Redis 是目前最常用的缓存解决方案。\n. Java 中有很多针对集合类做扩展的库，可以一并学了，这样就能更清楚了解 Java JDK 实现的不足，开阔自己的眼界：\n.. https://github.com/google/guava[google/guava: Google core libraries for Java]\n.. https://commons.apache.org/proper/commons-collections/[Apache Commons Collections]\n.. https://www.eclipse.org/collections/[Eclipse Collections - Features you want with the collections you need.]\n====\n\n== JDK 集合类\n\n*Base + Iterator*::\n代码总行数： 103 + 135 + 302 + 195 + 838 + 127 + 734 + 480 = 2914 行，预计 5 个小时。\n. `java.lang.Iterable`\n. `java.util.Iterator`\n. `java.util.PrimitiveIterator`\n. `java.util.ListIterator`\n. `java.util.Spliterator`\n. `java.util.Enumeration`\n. `java.util.Collection`\n. `java.util.AbstractCollection`\n\n*List*::\n代码总行数： 1063 + 942 + 253 + 1266 + 1509 + 141 + 1759 = 6933 行，预计 12 个小时。\n. `java.util.List`\n. `java.util.AbstractList`\n. `java.util.AbstractSequentialList`\n. `java.util.LinkedList`\n. `java.util.Vector`\n. `java.util.Stack`\n. `java.util.ArrayList`\n\n*Queue*::\n代码总行数： 212 + 616 + 192 + 1233 + 987 = 3240 行，预计 6 个小时。\n. `java.util.Queue`\n. `java.util.Deque`\n. `java.util.AbstractQueue`\n. `java.util.ArrayDeque`\n. `java.util.PriorityQueue`\n\n*Set*::\n代码总行数： 732 + 186 + 264 + 491 + 323 + 361 + 560 + 195 + 1395 = 4507 行，预计 8 个小时。\n. `java.util.Set`\n. `java.util.AbstractSet`\n. `java.util.SortedSet`\n. `java.util.EnumSet`\n. `java.util.NavigableSet`\n. `java.util.HashSet`\n. `java.util.TreeSet`\n. `java.util.LinkedHashSet`\n. `java.util.BitSet`\n\n\nimage::./docs/images/java.util.Collection.png[]\n\n*Map*::\n代码总行数： 1687 + 284 + 424 + 857 + 3012 + 1339 + 812 + 1600 + 756 + 2444 + 155 + 1521 = 14891 行，预计 28 个小时。\n. `java.util.Map`\n. `java.util.SortedMap`\n. `java.util.NavigableMap`\n. `java.util.AbstractMap`\n. `java.util.TreeMap`\n. `java.util.WeakHashMap`\n. `java.util.EnumMap`\n. `java.util.IdentityHashMap`\n. `java.util.LinkedHashMap`\n. `java.util.HashMap`\n. `java.util.Dictionary`\n. `java.util.Hashtable`\n\nimage::./docs/images/java.util.Map.png[]\n\n来张总体结构图：\n\nimage::./docs/images/jdk-collection-classes.png[]\n\nTIP: 这里没有包含并发相关的集合类。这块内容放到并发中一起搞。\n\n== 目录结构介绍\n\n[source]\n----\n.\n├── LICENSE\n├── README.adoc\n├── pom.xml\n├── docs -- 这里存放阅读源码的文档。\n│   └── images -- 这里存放相关图片\n└── src\n    ├── main\n    │   └── java\n    │       └── com\n    │           └── diguage\n    │               └── truman\n    │                   └── App.java\n    └── test\n        └── java\n            └── com\n                └── diguage\n                    └── truman  -- 这个目录存放相关测试代码。\n                        └── AppTest.java\n----\n\n== 源码列表\n\n查看文档，请移步： https://diguage.github.io/jdk-source-analysis[JDK 源码分析]。\n\n* [x] link:./docs/java.util.Iterator.adoc[迭代器 Iterator、Enumeration、Spliterator 与 Iterable]\n* [ ] link:./docs/java.util.PrimitiveIterator.adoc[java.util.PrimitiveIterator]\n* [ ] link:./docs/java.util.ListIterator.adoc[java.util.ListIterator]\n* [ ] link:./docs/java.util.Spliterator.adoc[java.util.Spliterator]\n* [ ] link:./docs/java.util.Collection.adoc[java.util.Collection]\n* [ ] link:./docs/java.util.AbstractCollection.adoc[java.util.AbstractCollection]\n* [ ] link:./docs/java.util.List.adoc[java.util.List]\n* [ ] link:./docs/java.util.AbstractList.adoc[java.util.AbstractList]\n* [ ] link:./docs/java.util.AbstractSequentialList.adoc[java.util.AbstractSequentialList]\n* [ ] link:./docs/java.util.LinkedList.adoc[java.util.LinkedList]\n* [ ] link:./docs/java.util.Vector.adoc[java.util.Vector]\n* [ ] link:./docs/java.util.Stack.adoc[java.util.Stack]\n* [ ] link:./docs/java.util.ArrayList.adoc[java.util.ArrayList]\n* [ ] link:./docs/java.util.Queue.adoc[java.util.Queue]\n* [ ] link:./docs/java.util.Deque.adoc[java.util.Deque]\n* [ ] link:./docs/java.util.AbstractQueue.adoc[java.util.AbstractQueue]\n* [ ] link:./docs/java.util.ArrayDeque.adoc[java.util.ArrayDeque]\n* [ ] link:./docs/java.util.PriorityQueue.adoc[java.util.PriorityQueue]\n* [ ] link:./docs/java.util.Set.adoc[java.util.Set]\n* [ ] link:./docs/java.util.AbstractSet.adoc[java.util.AbstractSet]\n* [ ] link:./docs/java.util.SortedSet.adoc[java.util.SortedSet]\n* [ ] link:./docs/java.util.EnumSet.adoc[java.util.EnumSet]\n* [ ] link:./docs/java.util.NavigableSet.adoc[java.util.NavigableSet]\n* [ ] link:./docs/java.util.HashSet.adoc[java.util.HashSet]\n* [ ] link:./docs/java.util.TreeSet.adoc[java.util.TreeSet]\n* [ ] link:./docs/java.util.LinkedHashSet.adoc[java.util.LinkedHashSet]\n* [ ] link:./docs/java.util.BitSet.adoc[java.util.BitSet]\n* [ ] link:./docs/java.util.Map.adoc[java.util.Map]\n* [ ] link:./docs/java.util.SortedMap.adoc[java.util.SortedMap]\n* [ ] link:./docs/java.util.NavigableMap.adoc[java.util.NavigableMap]\n* [ ] link:./docs/java.util.AbstractMap.adoc[java.util.AbstractMap]\n* [ ] link:./docs/java.util.TreeMap.adoc[java.util.TreeMap]\n* [ ] link:./docs/java.util.WeakHashMap.adoc[java.util.WeakHashMap]\n* [ ] link:./docs/java.util.EnumMap.adoc[java.util.EnumMap]\n* [ ] link:./docs/java.util.IdentityHashMap.adoc[java.util.IdentityHashMap]\n* [ ] link:./docs/java.util.LinkedHashMap.adoc[java.util.LinkedHashMap]\n* [ ] link:./docs/java.util.HashMap.adoc[java.util.HashMap]\n* [ ] link:./docs/java.util.Dictionary.adoc[java.util.Dictionary]\n* [ ] link:./docs/java.util.Hashtable.adoc[java.util.Hashtable]\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdiguage%2Fjdk-source-analysis","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdiguage%2Fjdk-source-analysis","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdiguage%2Fjdk-source-analysis/lists"}