首页 > 其他分享 >JDK阅读顺序

JDK阅读顺序

时间:2024-01-04 12:45:25浏览次数:29  
标签:Node index 顺序 java HashMap JDK int 阅读 hash

很多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、ArrayList

1)Object[] elementData:数据存储
2)int size:使用数量
3)int modCount:操作次数
4)初始化:
  a、指定容量初始化数组;
  b、不指定容量第一次add数据时初始化数组容量10
5)扩容:
  a、1.5倍;
  b、不够取所需最小;
  c、新容量大于MAX_ARRAY_SIZE(Integer.MAX_VALUE-8),按所需容量取MAX_ARRAY_SIZE和Integer.MAX_VALUE较小值

2、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()
6)int modCount

3、HashMap

1) Node{int hash, K key, V value, Node next}
注:hash是根据key算的
2) Node[] table:数据存储,默认大小16
3) Set<Map.Entry> entrySet:用于Map遍历的集合
4) int size:当前数量
5) int threshold:size超过多少时需要扩容,默认16
6) float loadFactor:负载因子,默认0.75f
7)int modCount:操作次数
8) put():根据key算hash,根据容量和hash算index,table[index]没有直接添加到数组中,table[index]有,若index位置同一个key则更新,否则遍历next是否有,有则更新,无则新增
注:判断key是否相等,先比较hash,若相等在比较equals
9)扩容:put后,当size>threshold时需要扩容,扩容时容量翻倍,重新算hash复制到新数组
10)哈希冲突:1.7以前数组+链表,1.8开始数组+红黑树
11)get()类似

4、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,根据key算hash,在根据hash和容量算index,对table[index]加锁,从而达到更大的并发量
    d、get(): 同HashMap
    e、put(): 对table[index]加锁,如果table[index]为null则使用CAS操作,如果不为null对table[index]加synchronized

5、Hashtable

1) 结构实现与HashMap基本一致
2)通过synchronized方法保证线程安全

6、LinkedHashMap

1)继承HashMap
2) Entry{HashMap.Node, Entry before, after}
3) Entry head, tail
4) 重写newNode()添加节点时,除像HashMap中添加外,保存before、after信息

7、TreeMap

1)红黑树,即自平衡二叉查找树,时间复杂度O(logn)
2)Entry{K k, V v, Entry parent, left, right, boolean color}
3)Entry root,int size, int modeCount

8、Object

1) wait(), notify(), notifyAll(), wait(timeout)
2) hashCode(), equals()
3) clone()

9、String

1) final char[] value
2) int hash
3) equals(), startWith(), endWith(), replace

10、AbstractStringBuilder

1) char[] value
2) int count
3) 扩容:翻倍,不够取所需最小

11、StringBuilder:继承AbstractStringBuilder
12、StringBuffer

1) 继承AbstractStringBuilder
2) synchronized方法保证线程安全
3) char[] toStringCache

13、Set一般都是使用委托模式到Map
14、AbstractMap维护EntrySet,AbstractSet维护Iterator,AbstractList维护Iterator

 

标签:Node,index,顺序,java,HashMap,JDK,int,阅读,hash
From: https://www.cnblogs.com/wtxyear/p/17944992

相关文章

  • 数据结构线性表之顺序表
    定义:一个线性表是由同类型数据元素构成的有限序列一般地,当表示一个由n(n>=0)个元素组成的线性表L时,将线性表中的所有元素列在一对括号中,每个元素之间以逗号分隔,如L=(a0,a1,....,an-1)不搞的像数据那么麻烦了,按我理解的来表项:线性表中的数据元素表头元素:线性表的第一个元素表尾元素:......
  • 刷题笔记——顺序表(C++)
    665.非递减数列-力扣(LeetCode)给你一个长度为 n 的整数数组 nums ,请你判断在 最多 改变 1 个元素的情况下,该数组能否变成一个非递减数列。我们是这样定义一个非递减数列的: 对于数组中任意的 i (0<=i<=n-2),总满足 nums[i]<=nums[i+1]。解题思路遍历数组,计算递......
  • 【JDK新特性】JDK和Springboot各版本新特性介绍
    目录参考资料以下是一些较新版本的JDK的主要新特性介绍:JDK8:Lambda表达式:引入了函数式编程的概念,使得代码更简洁、可读性更强。StreamAPI:提供了一种高效处理集合数据的方式,支持并行处理。默认方法(DefaultMethods):接口可以包含具有默认实现的方法。方法引用(MethodReferences):通过......
  • 【JDK源码】String源码学习笔记
    代码运行环境:JDK8首先思考几个问题:String对象在不同的JDK中是如何实现的?String对象的不可变性是什么样的?下面这段代码的输出结果是什么?Strings1=newString("aaa")+newString("");s1.intern();Strings2="aaa";System.out.println(s1==s2);Strings3=newString("bbb......
  • 【JDK源码】Java中LinkedList的实现
    JDK版本:1.8.0_271基础介绍LinkedList底层数据结构是一个双向链表:链表的每个节点叫做Node,在Node中,prev属性表示前一个节点的位置,next属性表示后一个节点的位置first是双向链表的头节点,它的前一个节点是nulllast是双向链表的尾节点,它的后一个节点是null当链表中没有数据时,fi......
  • 【JDK源码】Java包装类的缓存是怎么回事
    JDK版本:1.8.0_271基础介绍缓存机制包装类是对Java中基本类型的封装,在JDK5中引入了包装类的缓存机制,有助于节省内存。实现方式是在类初始化的时,提前创建好会频繁使用的包装类对象,当需要使用某个类的包装类对象时,如果该对象包装的值在缓存的范围内,就返回缓存的对象,否则就创建新的......
  • 【JDK源码】ArrayList的代码实现
    JDK版本:1.8.0_271基础介绍ArrayList底层数据结构就是一个数组:index表示数组下标,从0开始计数,elementDatda表示数组本身DEFAULT_CAPACITY表示数组的初始化大小,默认是10size表示数组的大小,int类型,没有使用volatile修饰,非线程安全modCount统计当前数组被修改的版本次数,数......
  • JDK9中的String底层实现为什么用UTF-16而不用UTF-8呢?
    UTF-8是一种对空间利用效率最高的编码集,它是不定长的,使用1~4字节为每个字符编码。这种情况下,如果能用一个字节存放字符就不会使用两个字节,两个字节不够就用三个字节。这种编码集只适用于传输和存储,并不适合拿来做String的底层实现。String有随机访问的方法,比如charAt、subString等......
  • 阅读笔记三
    在《从小工到专家》中,作者通过丰富的案例和深刻的观点,为读者揭示了如何成为一位计算机专家。以下是一些关键点:1.实践是成功之本书中强调,通过实际的项目经验,你能够更好地理解问题、找到解决方案,并在不断的实践中提升自己。只有通过实际动手,才能真正掌握知识,培养解决问题的能力。......
  • Jmter:setUp线程组和tearDown线程组及线程组间的执行顺序
    一前言环境:window10Jmeter5.3在jmeter中新建线程组时,有三种可选项,如下其中,setUp和tearDown线程组用的没有普通线程组那样频繁,但也有特别的用处二setUp线程组如上,setUp线程组中的字段配置与普通线程组是一样的,区别是setUp线程组一定是在普通线程组执行前运行利用setUp......