JDK源码阅读顺序

您所在的位置:网站首页 java源码阅读顺序 JDK源码阅读顺序

JDK源码阅读顺序

2024-02-24 21:05| 来源: 网络整理| 查看: 265

很多java开发的小伙伴都会阅读jdk源码,然而确不知道应该从哪读起。以下为小编整理的通常所需阅读的源码范围。 标题为包名,后面序号为优先级1-4,优先级递减 1、java.lang

Object 1 String 1 AbstractStringBuilder 1 StringBuffer 1 StringBuilder 1 Boolean 2 Byte 2 Double 2 Float 2 Integer 2 Long 2 Short 2 Thread 2 ThreadLocal 2 Enum 3 Throwable 3 Error 3 Exception 3 Class 4 ClassLoader 4 Compiler 4 System 4 Package 4 Void 4

2、java.util

AbstractList 1 AbstractMap 1 AbstractSet 1 ArrayList 1 LinkedList 1 HashMap 1 Hashtable 1 HashSet 1 LinkedHashMap 1 LinkedHashSet 1 TreeMap 1 TreeSet 1 Vector 2 Queue 2 Stack 2 SortedMap 2 SortedSet 2 Collections 3 Arrays 3 Comparator 3 Iterator 3 Base64 4 Date 4 EventListener 4 Random 4 SubList 4 Timer 4 UUID 4 WeakHashMap 4

3、java.util.concurrent

ConcurrentHashMap 1 Executor 2 AbstractExecutorService 2 ExecutorService 2 ThreadPoolExecutor 2 BlockingQueue 2 AbstractQueuedSynchronizer 2 CountDownLatch 2 FutureTask 2 Semaphore 2 CyclicBarrier 2 CopyOnWriteArrayList 3 SynchronousQueue 3 BlockingDeque 3 Callable 4

4、java.util.concurrent.atomic

AtomicBoolean 2 AtomicInteger 2 AtomicLong 2 AtomicReference 3

5、java.lang.reflect

Field 2 Method 2

6、java.lang.annotation

Annotation 3 Target 3 Inherited 3 Retention 3 Documented 4 ElementType 4 Native 4 Repeatable 4

7、java.util.concurrent.locks

Lock 2 Condition 2 ReentrantLock 2 ReentrantReadWriteLock 2

8、java.io

File 3 InputStream 3 OutputStream 3 Reader 4 Writer 4

9、java.nio

1) Buffer 3 ByteBuffer 4 CharBuffer 4 DoubleBuffer 4 FloatBuffer 4 IntBuffer 4 LongBuffer 4 ShortBuffer 4

10、java.sql

Connection 3 Driver 3 DriverManager 3 JDBCType 3 ResultSet 4 Statement 4

11、java.net

Socket 3 ServerSocket 3 URI 4 URL 4 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实现



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3