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 版權宣告:本文為博主原創文章,轉載請附上博文連結!