- 持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第26天,点击查看活动详情
前言
观摩源码三部曲
- 第一步:看类图
- 第二步:看结构
- 第三步:看源码
1. 类图
LinkedList类图
从类图上看LinkedList的上级关系如下
- 继承了:AbstractSequentialList
- 实现了:List、Deque、Cloneable、java.io.Serializable
2. 看结构
每个类的方法,局部变量、常量,向上重写的方法,lambada表达式等类的内容都可以通过Structure一目了然
2.1 LinkedList
看结构的话得筛选当前类的内容结构
- 构造函数
- 局部方法
- 局部变量/常量
- 局部类
- 重写/实现方法
如上图,我这个结构图是进行了内部类跟重写方法的收缩,否则还是很多的。
从结构图上分析LinkedList除了构造函数是public的,其他局部方法、局部类、局部变量/常量都是非public的,所以我们使用对外的get、set、add、remove、indexOf等方法都是父类定义好的规范,LinkedList只是进行了实现,即使自己进行了局部方法的编写也是为了配合对外方法的逻辑。
2.2 AbstractSequentialList
2.3 AbstractList
2.3 List
2.4 Collection
2.5 Iterable
3. 源码
看源码的时候先看构造函数,这是一个类的创建方式,先看一下LinkedList的构造函数,LinkedList只有两个构造函数,一个空参构造跟一个无参构造
- 空参构造函数
- 空参构造什么都没做,就是一个空代码块
- 空参构造什么都没做,就是一个空代码块
- 有参构造函数
- 有参构造的传参为Collection
- 第一步调用了上面的空参
- 第二部调用了addAll的操作并将参数传递了进去