日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

JDK源码阅读顺序

發布時間:2025/3/21 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JDK源码阅读顺序 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

很多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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
4、java.util.concurrent.atomic

1) AtomicBoolean 2
2) AtomicInteger 2
3) AtomicLong 2
4) AtomicReference 3
1
2
3
4
5、java.lang.reflect

1) Field 2
2) Method 2
1
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
1
2
3
4
5
6
7
8
7、java.util.concurrent.locks

1) Lock 2
2) Condition 2
3) ReentrantLock 2
4) ReentrantReadWriteLock 2
1
2
3
4
8、java.io

1) File 3
2) InputStream ? 3
3) OutputStream ?3
4) Reader ?4
5) Writer ?4
1
2
3
4
5
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
1
2
3
4
5
6
7
8
10、java.sql

1) Connection 3
2) Driver 3
3) DriverManager 3
4) JDBCType 3
5) ResultSet 4
6) Statement 4
1
2
3
4
5
6
11、java.net

1) Socket 3
2) ServerSocket 3
3) URI 4
4) URL 4
5) URLEncoder 4
1
2
3
4
5
閱讀筆記簡版
1、Object

wait(), notify(), notifyAll(), wait(timeout)
hashCode(), equals()
clone()
2、String

char[] value
int hash
equals(), startWith(), endWith(), replace
3、AbstractStringBuilder

char[] value
int count
擴容:翻倍,不夠取所需最小
4、StringBuffer

繼承AbstractStringBuilder
synchronized方法保證線程安全
char[] toStringCache
5、StringBuilder 繼承AbstractStringBuilder

6、ArrayList

Object[] elementData
int size
默認大小10
擴容:1.5倍,不夠取所需最小
7、LinkedList

Node {E item, Node prev, Node next}
int size
Node first
Node last
linkFirst(), linkLast(), linkBefore(), unLinkFirst(), unLinkLast(), unLink(), indexOf()
8、HashMap

Node{int hash, K key, V value, Node next}
默認容量16,負載因子0.75f
int size, modCount, threshold, float loadFactor
Node[] table
Set entrySet
put():根據key算hash,根據容量和hash算index,table[index]沒有直接添加到數組中,table[index]有,若index位置同一個key則更新,否則遍歷next是否有,有則更新,無則新增,最后根據thread與size判斷是否擴容。注:擴容時容量翻倍,重新算hash復制到新數組
7)get()類似
注:先比較hash,若相等在比較equals
9、Hashtable

結構實現與HashMap基本一致
2)通過synchronized方法保證線程安全
10、HashSet:委托給HashMap,其Value是同一個默認對象

11、LinkedHashMap繼承HashMap

Entry{HashMap.Node, Entry before, after}
Entry head, tail
重寫newNode()添加節點時,除像HashMap中添加外,保存before、after信息
12、LinkedHashSet繼承HashSet:底層存儲使用的LinkedHashMap,從而保證有序

13、AbstractMap維護EntrySet,AbstractSet維護Iterator,AbstractList維護Iterator

14、ConcurrentHashMap

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實現
————————————————
版權聲明:本文為CSDN博主「猴子哥哥1024」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/qq_21033663/article/details/79571506

總結

以上是生活随笔為你收集整理的JDK源码阅读顺序的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。