前言
自己也断断续续的读了一些JDK
的源码了,并且也写了总结,但是尴尬的是,该忘得还是忘了,所以打算系统的理理,然后没看完一个除了总结,再做个思维导图。阅读JDK的目的有三:
- 学好数据结构以及相关算法
- 毕竟是内功,该硬啃还是要硬啃
- 不希望自己到时候追悔莫及
- 能让自己的Java的理解和熟练度更上一层楼
- 莫问Python嘞,问就是爱过
- 面试
- 这也是没得办法,感觉目前面试不问个源码问题,都不像面试
顺带把LeetCode
相关的算法刷一遍😄
总体进程
常用数据结构手撸一遍
- 算法第四版
- 数据结构与算法分析
阅读JDK源码,记录
- 参考其他大佬的总结,查缺补漏
相关LeetCode题目刷了
JDK 集合类
太复杂, 然后去除JUC上的一些实现类, 再看一下
Collection
List
List中的元素是有序的, 可重复的, 主要的实现方式是动态数组和链表
Java中提供的List的实现主要有ArrayList、LinkedList、CopyOnWriteArrayList
,另外还有两个古老的类Vector
和Stack
。
java.util.LinkedList
✔java.util.Vector
✔java.util.Stack
✔java.util.ArrayList
✔java.util.concurrent.CopyOnWriteArrayList
✔
Queue
队列是遵循着一定原则的入队出队操作的集合, 先进先出, 一般来说在堆尾添加元素(入队), 在队头删除元素(出队), 但是也不一定, 不如优先队列的原则就不同
Java中提供的Queue的实现有: PriorityQueue、ArrayBlockingQueue、LinkedBlockingQueue、SynchronousQueue、PriorityBlockingQueue、LinkedTransferQueue、DelayQueue、ConcurrentLinkedQueue。
java.util.PriorityQueue
java.util.concurrent.ArrayBlockingQueue
java.util.concurrent.LinkedBlockingQueue
java.util.concurrent.SynchronousQueue
java.util.concurrent.PriorityBlockingQueue
java.util.concurrent.LinkedTransferQueue
java.util.concurrent.DelayQueue
java.util.concurrent.ConcurrentLinkedQueue
Deque
Deque
是一种特殊的队列,它的两端都可以进出元素,故而得名双端队列(Double Ended Queue)。
Java中提供的Deque
的实现主要有ArrayDeque、LinkedBlockingDeque、ConcurrentLinkedDeque、LinkedList。
java.util.Deque
java.util.ArrayDeque
java.util.concurrent.ConcurrentDeque
Set
Java中提供的Set的实现主要有HashSet、LinkedHashSet、TreeSet、CopyOnWriteArraySet、ConcurrentSkipListSet
。
java.util.HashSet
java.util.TreeSet
java.util.LinkedHashSet
java.util.concurrent.CopyOnWriteArraySet
java.util.concurrent.ConcurrentSkipListSet
Map
java中提供的Map的实现主要有HashMap、LinkedHashMap、WeakHashMap、TreeMap、ConcurrentHashMap、ConcurrentSkipListMap
,另外还有两个比较古老的Map实现HashTable、Properties
。
java.util.TreeMap
✔java.util.WeakHashMap
java.util.LinkedHashMap
java.util.HashMap
✔java.util.concurrent.ConcurrentHashMap
java.util.concurrent.ConcurrentSkipListMap
java.util.Hashtable
java.util.Properties
集合类概述
逛博客的时候,发现一张神图
阅读套路
大体上的阅读框架写好了,接下来就是细致的硬啃了,可以先从顶层的接口开始,然后是Abstact类,这样方便理解不同的具体的集合类必备的通用方法等,然后再看这些具体类对这些通用方法的具体实现。顺序还是老样子:增
、删
、改
、查
,然后是其他的细节部分。