1. 程式人生 > >JDK原始碼閱讀順序

JDK原始碼閱讀順序

版權宣告:本文為博主原創文章,未經博主允許不得轉載。    https://blog.csdn.net/qq_21033663/article/details/79571506 很多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  版權宣告:本文為博主原創文章,轉載請附上博文連結!