JDK源码阅读指南(简洁版)

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

 源码分类图  

(后面序号为优先级1-4,优先级递减)

  • 4
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值