关键词不能为空

位置:励志人生 > 名人名言 > 阅读笔记大全-java的JDK源码阅读顺序整理笔记

阅读笔记大全-java的JDK源码阅读顺序整理笔记

作者:车型网
日期:2020-02-22 04:32:50
阅读:

很多java开发的小伙伴都会阅读jdk源码,然而确不知道应该从哪读起。以下为本人整理的通常所需阅读的源码范围。




1、java.lang

1) Object 12) String 13) AbstractStringBuilder 14) StringBuffer 15) StringBuilder 16) Boolean 27) Byte 28) Double 29) Float 210) Integer 211) Long 212) Short 213) Thread 214) ThreadLocal 215) Enum 316) Throwable 317) Error 318) Exception 319) Class 420) ClassLoader 421) Compiler 422) System 423) Package 424) Void 4123456789101112131415161718192021222324

2、java.util

1) AbstractList 12) AbstractMap 13) AbstractSet 14) ArrayList 15) LinkedList 16) HashMap 17) Hashtable 18) HashSet 19) LinkedHashMap 110) LinkedHashSet 111) TreeMap 112) TreeSet 113) Vector 214) Queue 215) Stack 216) SortedMap 217) SortedSet 218) Collections 319) Arrays 320) Comparator 321) Iterator 322) Base64 423) Date 424) EventListener 425) Random 426) SubList 427) Timer 428) UUID 429) WeakHashMap 4123456789101112131415161718192021222324252627282930

3、java.util.concurrent

1) ConcurrentHashMap 12) Executor 23) AbstractExecutorService 24) ExecutorService 25) ThreadPoolExecutor 26) BlockingQueue 27)AbstractQueuedSynchronizer 28)CountDownLatch 29) FutureTask 210)Semaphore 211)CyclicBarrier 213)CopyOnWriteArrayList 314)SynchronousQueue 315)BlockingDeque 316) Callable 4123456789101112131415

4、java.util.concurrent.atomic

1) AtomicBoolean 22) AtomicInteger 23) AtomicLong 24) AtomicReference 31234

5、java.lang.reflect

1) Field 22) Method 212

6、java.lang.annotation

1) Annotation 32) Target 33) Inherited 34) Retention 35) Documented 46) ElementType 47) Native 48) Repeatable 412345678

7、java.util.concurrent.locks

1) Lock 22) Condition 23) ReentrantLock 24) ReentrantReadWriteLock 21234

8、java.io

1) File 32) InputStream 33) OutputStream 34) Reader 45) Writer 412345

9、java.nio

1) Buffer 32) ByteBuffer 43) CharBuffer 44) DoubleBuffer 45) FloatBuffer 46) IntBuffer 47) LongBuffer 48) ShortBuffer 412345678

10、java.sql

1) Connection 32) Driver 33) DriverManager 34) JDBCType 35) ResultSet 46) Statement 4123456

11、java.net

1) Socket 32) ServerSocket 33) URI 44) URL 45) URLEncoder 412345

阅读笔记简版

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. 扩容:1.5倍,不够取所需最小

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:底层存储使用的LinkedHashMap,从而保证有序


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实现


最后, 如果大家觉得本文不错,欢迎关注本头条号,每天会给大家分享不一样java技术资讯,关于更多笔记的学习资料,可以私信本头条号:java 即可获取!