很多java开发的小伙伴都会阅读jdk源码,然而确不知道应该从哪读起。以下为小编整理的通常所需阅读的源码范围。 标题为包名,后面序号为优先级1-4,优先级递减
文章目录
1、java.lang2、java.util3、java.util.concurrent4、java.util.concurrent.atomic5、java.lang.reflect6、java.lang.annotation7、java.util.concurrent.locks8、java.io9、java.nio10、java.sql11、java.net
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
wait(), notify(), notifyAll(), wait(timeout)hashCode(), equals()clone()
2、String
char[] valueint hashequals(), startWith(), endWith(), replace
3、AbstractStringBuilder
char[] valueint count扩容:翻倍,不够取所需最小
4、StringBuffer
继承AbstractStringBuildersynchronized方法保证线程安全char[] toStringCache
5、StringBuilder 继承AbstractStringBuilder
6、ArrayList
Object[] elementDataint size默认大小10扩容:1.5倍,不够取所需最小
7、LinkedList
Node {E item, Node prev, Node next}int sizeNode firstNode lastlinkFirst(), linkLast(), linkBefore(), unLinkFirst(), unLinkLast(), unLink(), indexOf()
8、HashMap
Node{int hash, K key, V value, Node next}默认容量16,负载因子0.75fint size, modCount, threshold, float loadFactorNode[] tableSet entrySetput():根据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实现