JDK源码阅读顺序

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

 Object 1
 String 1
 AbstractStringBuilder 1
 StringBuffer 1
 StringBuilder 1
 Boolean 2
 Byte 2
 Double 2
 Float 2
 Integer 2
 Long 2
 Short 2
 Thread 2
 ThreadLocal 2
 Enum 3
 Throwable 3
 Error 3
 Exception 3
 Class 4
 ClassLoader 4
 Compiler 4
 System 4
 Package 4
 Void 4

2、java.util

 AbstractList 1
 AbstractMap 1
 AbstractSet 1
 ArrayList 1
 LinkedList 1
 HashMap 1
 Hashtable 1
 HashSet 1
 LinkedHashMap 1
 LinkedHashSet 1
 TreeMap 1
 TreeSet 1
 Vector 2
 Queue 2
 Stack 2
 SortedMap 2
 SortedSet 2
 Collections 3
 Arrays 3
 Comparator 3
 Iterator 3
 Base64 4
 Date 4
 EventListener 4
 Random 4
 SubList 4
 Timer 4
 UUID 4
 WeakHashMap 4

3、java.util.concurrent

 ConcurrentHashMap 1
 Executor 2
 AbstractExecutorService 2
 ExecutorService 2
 ThreadPoolExecutor 2
 BlockingQueue 2
 AbstractQueuedSynchronizer 2
 CountDownLatch 2
 FutureTask 2
 Semaphore 2
 CyclicBarrier 2
 CopyOnWriteArrayList 3
 SynchronousQueue 3
 BlockingDeque 3
 Callable 4

4、java.util.concurrent.atomic

 AtomicBoolean 2
 AtomicInteger 2
 AtomicLong 2
 AtomicReference 3

5、java.lang.reflect

 Field 2
 Method 2

6、java.lang.annotation

 Annotation 3
 Target 3
 Inherited 3
 Retention 3
 Documented 4
 ElementType 4
 Native 4
 Repeatable 4

7、java.util.concurrent.locks

 Lock 2
 Condition 2
 ReentrantLock 2
 ReentrantReadWriteLock 2

8、java.io

 File 3
 InputStream   3
 OutputStream  3
 Reader  4
 Writer  4

9、java.nio

1) Buffer 3
 ByteBuffer 4
 CharBuffer 4
 DoubleBuffer 4
 FloatBuffer 4
 IntBuffer 4
 LongBuffer 4
 ShortBuffer 4

10、java.sql

 Connection 3
 Driver 3
 DriverManager 3
 JDBCType 3
 ResultSet 4
 Statement 4

11、java.net

 Socket 3
 ServerSocket 3
 URI 4
 URL 4
 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实现

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值