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
?
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源码学习路线~每天学一点~每天进步一点点的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: Mac photoshop cc 201
- 下一篇: 部署好网站,同局域网中电脑无法访问的问题
