很多java开发的小伙伴都会阅读jdk源码,然而确不知道应该从哪读起。以下为小编整理的通常所需阅读的源码范围。
标题为包名,后面序号为优先级1-4,优先级递减
1、java.lang

1) Object 1
2) String 1
3) AbstractStringBuilder 1
4) StringBuffer 1
5) StringBuilder 1
6) Boolean 2
7) Byte 2
8) Double 2
9) Float 2
10) Integer 2
11) Long 2
12) Short 2
13) Thread 2
14) ThreadLocal 2
15) Enum 3
16) Throwable 3
17) Error 3
18) Exception 3
19) Class 4
20) ClassLoader 4
21) Compiler 4
22) System 4
23) Package 4
24) Void 4

2、java.util

1) AbstractList 1
2) AbstractMap 1
3) AbstractSet 1
4) ArrayList 1
5) LinkedList 1
6) HashMap 1
7) Hashtable 1
8) HashSet 1
9) LinkedHashMap 1
10) LinkedHashSet 1
11) TreeMap 1
12) TreeSet 1
13) Vector 2
14) Queue 2
15) Stack 2
16) SortedMap 2
17) SortedSet 2
18) Collections 3
19) Arrays 3
20) Comparator 3
21) Iterator 3
22) Base64 4
23) Date 4
24) EventListener 4
25) Random 4
26) SubList 4
27) Timer 4
28) UUID 4
29) WeakHashMap 4

3、java.util.concurrent

1) ConcurrentHashMap 1
2) Executor 2
3) AbstractExecutorService 2
4) ExecutorService 2
5) ThreadPoolExecutor 2
6) BlockingQueue 2
7)AbstractQueuedSynchronizer 2
8)CountDownLatch 2
9) FutureTask 2
10)Semaphore 2
11)CyclicBarrier 2
13)CopyOnWriteArrayList 3
14)SynchronousQueue 3
15)BlockingDeque 3
16) Callable 4

4、java.util.concurrent.atomic

1) AtomicBoolean 2
2) AtomicInteger 2
3) AtomicLong 2
4) AtomicReference 3

5、java.lang.reflect

1) Field 2
2) Method 2

6、java.lang.annotation

1) Annotation 3
2) Target 3
3) Inherited 3
4) Retention 3
5) Documented 4
6) ElementType 4
7) Native 4
8) Repeatable 4

7、java.util.concurrent.locks

1) Lock 2
2) Condition 2
3) ReentrantLock 2
4) ReentrantReadWriteLock 2

8、java.io

1) File 3
2) InputStream   3
3) OutputStream  3
4) Reader  4
5) Writer  4

9、java.nio

1) Buffer 3
2) ByteBuffer 4
3) CharBuffer 4
4) DoubleBuffer 4
5) FloatBuffer 4
6) IntBuffer 4
7) LongBuffer 4
8) ShortBuffer 4

10、java.sql

1) Connection 3
2) Driver 3
3) DriverManager 3
4) JDBCType 3
5) ResultSet 4
6) Statement 4

11、java.net

1) Socket 3
2) ServerSocket 3
3) URI 4
4) URL 4
5) URLEncoder 4

阅读笔记简版

1、Object
1) wait(), notify(), notifyAll(), wait(timeout)
2) hashCode(), equals()
3) clone()

2、String
1) char[] value
2) int hash
3) equals(), startWith(), endWith(), replace

3、AbstractStringBuilder
1) char[] value
2) int count
3) 扩容:翻倍,不够取所需最小

4、StringBuffer
1) 继承AbstractStringBuilder
2) synchronized方法保证线程安全
3) char[] toStringCache

5、StringBuilder 继承AbstractStringBuilder

6、ArrayList
1) Object[] elementData
2) int size
3) 默认大小10
4) 扩容:翻倍,不够取所需最小

7、LinkedList
1) Node {E item, Node prev, Node next}
2) int size
3) Node first
4) Node last
5) linkFirst(), linkLast(), linkBefore(), unLinkFirst(), unLinkLast(), unLink(), indexOf()

8、HashMap
1) Node{int hash, K key, V value, Node next}
2) 默认容量16,负载因子0.75f
3) int size, modCount, threshold, float loadFactor
4) Node[] table
5) Set entrySet
6) put():根据key算hash,根据容量和hash算index,table[index]没有直接添加到数组中,table[index]有,若index位置同一个key则更新,否则遍历next是否有,有则更新,无则新增,最后根据thread与size判断是否扩容。注:扩容时容量翻倍,重新算hash复制到新数组
7)get()类似
注:先比较hash,若相等在比较equals

9、Hashtable
1) 结构实现与HashMap基本一致
2)通过synchronized方法保证线程安全

10、HashSet:委托给HashMap,其Value是同一个默认对象

11、LinkedHashMap继承HashMap
1) Entry{HashMap.Node, Entry before, after}
2) Entry head, tail
3) 重写newNode()添加节点时,除像HashMap中添加外,保存before、after信息

12、LinkedHashSet继承HashSet:不知道如何实现的顺序?

13、AbstractMap维护EntrySet,AbstractSet维护Iterator,AbstractList维护Iterator

14、ConcurrentHashMap
1) JDK1.7及以前:
a、Segment[] ,HashEntry[] , HashEntry{hash, k, v, next}
b、根据key算hash,根据hash和Segment的大小算位置,每个segment拥有一个自己的HashEntry[]
c、get():不加锁,volatile类型
d、put(): 对相应segment加锁
e、size():各HashEntry[] 之和,先不加锁算两遍,若一致则返回,若不一致则加锁重新计算
2)JDK1.8
a、Node{hash, key, value, next}
b、Node[] table
c、大多数操作类似于HashMap,不同CAS方式设置,根据key算hash,在根据hash和容量算index,对table[index]加锁,从而达到更大的并发量
d、get(): 同HashMap
e、put(): 对table[index]加锁

15、TreeMap
1)红黑树,即自平衡二叉查找树,时间复杂度O(logn)
2)Entry{K k, V v, Entry parent, left, right, boolean color}
3)Entry root,int size, int modeCount

16、TreeSet:委托TreeMap实现
---------------------
作者:猴子哥哥1024
来源:CSDN
原文:https://blog.csdn.net/qq_21033663/article/details/79571506
版权声明:本文为博主原创文章,转载请附上博文链接!

JDK源码学习路线~每天学一点~每天进步一点点相关推荐

  1. JAVA JDK 源码学习

    JAVA JDK 源码学习 ,以1.8为例,按照下面图片顺序依次学习: applet ,awt,beans,io,lang,math,net,nio,rmi,security,sql,text,tim ...

  2. JDK源码学习-基础

    JDK源码学习 目录 基础 1. 安装 1.1 下载JDK 1.2 配置环境变量 1.3 验证 2. 简单的程序 2.1 编写代码 2.2 编译文件 2.3 执行类 3. java基本类型 基础 1. ...

  3. 通过 JDK 源码学习灵活应用设计模式(上)

    如果大家觉得文章有错误内容,欢迎留言或者私信讨论~   在真实的项目开发中,对于设计模式要学会活学活用,切不可死记硬背,生搬硬套设计模式的设计与实现.需要了解到: 设计的过程是先有问题后有方案的    ...

  4. JDK源码学习笔记——Integer

    一.类定义 public final class Integer extends Number implements Comparable<Integer> 二.属性 private fi ...

  5. 非常实用,IDEA 搭建JDK源码学习环境(可修改+断点+笔记)

    点击关注公众号,实用技术文章及时了解 来源:chenxiao.blog.csdn.net/article/details/104369824 在学习JDK源码的时候,自然少不了代码的调试. 阅读与调试 ...

  6. JDK源码学习笔记——String

    1.学习jdk源码,从以下几个方面入手: 类定义(继承,实现接口等) 全局变量 方法 内部类 2.hashCode private int hash; public int hashCode() {i ...

  7. JDK源码学习之Arraylist与LinkedList

    ArrayList和LinkedList是我们在开发过程中常用的两种集合类,本文将从底层源码实现对其进行简单介绍. 下图是Java集合类所涉及的类图. 一.ArrayList 从上面的集合类图可以看出 ...

  8. JDK源码学习笔记——Enum枚举使用及原理

    一.为什么使用枚举 什么时候应该使用枚举呢?每当需要一组固定的常量的时候,如一周的天数.一年四季等.或者是在我们编译前就知道其包含的所有值的集合. 利用 public final static 完全可 ...

  9. JDK源码学习04-寄生虫LinkedHashMap

    活久见的LinkedHashMap 随便聊聊 笔者大三,在2021.1.18入职字节实习生,干了四十天就休假跑路回去上课了.最近一大段时间过的非常松懈,现在报复性疯狂发布博客,哈哈.还是决定阅读JDK ...

最新文章

  1. Servlet的Filter的使用
  2. ArcGIS Server开发教程系列(3)切片
  3. 计算机考研考编程,计算机考研面试------编程语言
  4. [改善Java代码]自由选择字符串拼接方法
  5. drools动态配置规则_关于规则引擎
  6. Dapper基础用法
  7. android 多平台发布,内容多平台发布
  8. 机器学习:监督学习和无监督学习
  9. php排列组合1004无标题,PHP的排列组合有关问题
  10. 编译问题解决:mkdir: 无法创建目录/usr/local/share/man/man1: 文件已存在
  11. matlab中的pzmap的意思,Matlab 学习
  12. 三极管的饱和导通条件
  13. 生日提醒功能-提前三天
  14. nuvoton uboo2013引导流程 2 - spl
  15. Day 24 - 设定开发帐号 HBuilder X - DCloud 注册
  16. Python3基础--18--数据库编程(上)
  17. mysql 无法启动 0xc000007b_「应用程序无法正常启动0xc000007b」正确解决 应用程序无法正常启动(0xc000007b)的问题 - seo实验室...
  18. Unity Timeline运行时脚本控制Mute和UnMute(Mute/UnMute a timeline track via scripting)
  19. android 根文件系统,Android根文件系统相关应用介绍
  20. android 大富翁模拟器,我要当老板大富翁模拟器

热门文章

  1. [css] 用css实现饼图效果
  2. 工作281:时间戳转换问题
  3. 前端学习(2656):vue2中用v-model实现
  4. “约见”面试官系列之常见面试题第三十二篇之async和await(建议收藏)
  5. 前端学习(2015)vue之电商管理系统电商系统之实现图片的预览效果
  6. 前端学习(1744):前端调试值之调试元素的盒模型
  7. 前端学习(1419):ajax请求参数传递
  8. mybatis学习(27):获取自增id方式一(在mapper中insert配置节点的属性)
  9. html:(19):单选框,复选框,下拉列表框
  10. Oracle数据库配置监听的作用