Giter Site home page Giter Site logo

jdk-source-analysis's Introduction

JDK & STL 源码分析计划

为了学好数据结构以及相关算法,同时也为了更好地理解 JDK 的底层实现,计划对 JDK 集合类的源码做一个系统的阅读分析。

欢迎感兴趣的小伙伴提交 PR 或 Issue。

Warning
本文档基于 JDK 1.8.0_201 的代码开展分析,请 PR 的小伙伴使用相同的 JDK。谢谢!

总体思路

  1. 学习基本的数据结构认识。兵马未动粮草先行。先把基础理论搞清楚。

    1. 学Java的,可以从下面两本书中选一本:

      1. 数据结构与算法分析 — 这本书的优点在于和 Java JDK 的集合类很贴近。

      2. 算法(第4版) — 这本书胜在图很多。

    2. 学 C/C++ 的,可以看下面这套书:

  2. 自己实现一遍基本的数据结构;

  3. 阅读 JDK 或 STL 源码,做学习笔记。

    Tip
    对比一下自己的实现和这些经典代码的实现,总结自己差距,提高自己的编码能力。
    1. STL源码剖析  — 阅读源码时,建议参考一下本书的内容。

    2. 建议把网上的源码分析笔记都看一看,取长补短,补充自己的分析。

    3. 建议把网上相关面试题也看一看,检验自己的学习成果。

  4. 相关联的 LeetCode 上的题都刷掉。

Note

还有两个想法:

  1. 可以把 Redis 的实现也过一下,Redis 实现也有很多不错的思路。毕竟 Redis 是目前最常用的缓存解决方案。

  2. Java 中有很多针对集合类做扩展的库,可以一并学了,这样就能更清楚了解 Java JDK 实现的不足,开阔自己的眼界:

JDK 集合类

Base

代码总行数: 103 + 604 + 469 = 1176 行,预计 2 个小时。

  1. java.lang.Iterable

  2. java.util.Collection

  3. java.util.AbstractCollection

List

代码总行数: 734 + 781 + 253 + 1262 + 1456 + 141 + 1468 = 6095 行,预计 12 个小时。

  1. java.util.List

  2. java.util.AbstractList

  3. java.util.AbstractSequentialList

  4. java.util.LinkedList

  5. java.util.Vector

  6. java.util.Stack

  7. java.util.ArrayList

Queue

代码总行数: 218 + 584 + 192 + 992 + 907 = 2893 行,预计 6 个小时。

  1. java.util.Queue

  2. java.util.Deque

  3. java.util.AbstractQueue

  4. java.util.ArrayDeque

  5. java.util.PriorityQueue

Set

代码总行数: 413 + 186 + 264 + 464 + 319 + 361 + 560 + 195 + 1248 = 4010 行,预计 8 个小时。

  1. java.util.Set

  2. java.util.AbstractSet

  3. java.util.SortedSet

  4. java.util.EnumSet

  5. java.util.NavigableSet

  6. java.util.HashSet

  7. java.util.TreeSet

  8. java.util.LinkedHashSet

  9. java.util.BitSet

java.util.Collection
Map

代码总行数: 1183 + 284 + 424 + 860 + 3019 + 1339 + 812 + 1600 + 756 + 2397 + 155 + 1422 = 14251 行,预计 28 个小时。

  1. java.util.Map

  2. java.util.SortedMap

  3. java.util.NavigableMap

  4. java.util.AbstractMap

  5. java.util.TreeMap

  6. java.util.WeakHashMap

  7. java.util.EnumMap

  8. java.util.IdentityHashMap

  9. java.util.LinkedHashMap

  10. java.util.HashMap

  11. java.util.Dictionary

  12. java.util.Hashtable

java.util.Map
Iterator

代码总行数: 118 + 302 + 195 = 615 行,预计 2 个小时。

  1. java.util.Iterator

  2. java.util.PrimitiveIterator

  3. java.util.ListIterator

来张总体结构图:

jdk collection classes
Tip
这里没有包含并发相关的集合类。这块内容放到并发中一起搞。

目录结构介绍

.
├── LICENSE
├── README.adoc
├── pom.xml
├── docs -- 这里存放阅读源码的文档。
│   └── images -- 这里存放相关图片
└── src
    ├── main
    │   └── java
    │       └── com
    │           └── diguage
    │               └── truman
    │                   └── App.java
    └── test
        └── java
            └── com
                └── diguage
                    └── truman  -- 这个目录存放相关测试代码。
                        └── AppTest.java

jdk-source-analysis's People

Contributors

diguage avatar

Watchers

James Cloos avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.