LinkedList源码观摩

65 阅读1分钟
  • 持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第26天,点击查看活动详情

前言

观摩源码三部曲

  1. 第一步:看类图
  2. 第二步:看结构
  3. 第三步:看源码

1. 类图

LinkedList类图

image.png

从类图上看LinkedList的上级关系如下

  • 继承了:AbstractSequentialList
  • 实现了:List、Deque、Cloneable、java.io.Serializable

2. 看结构

每个类的方法,局部变量、常量,向上重写的方法,lambada表达式等类的内容都可以通过Structure一目了然

2.1 LinkedList

看结构的话得筛选当前类的内容结构

  • 构造函数
  • 局部方法
  • 局部变量/常量
  • 局部类
  • 重写/实现方法

image.png

如上图,我这个结构图是进行了内部类跟重写方法的收缩,否则还是很多的。

从结构图上分析LinkedList除了构造函数是public的,其他局部方法、局部类、局部变量/常量都是非public的,所以我们使用对外的get、set、add、remove、indexOf等方法都是父类定义好的规范,LinkedList只是进行了实现,即使自己进行了局部方法的编写也是为了配合对外方法的逻辑。

2.2 AbstractSequentialList

image.png

2.3 AbstractList

image.png

2.3 List

image.png

2.4 Collection

image.png

2.5 Iterable

image.png

3. 源码

看源码的时候先看构造函数,这是一个类的创建方式,先看一下LinkedList的构造函数,LinkedList只有两个构造函数,一个空参构造跟一个无参构造

  • 空参构造函数
    • 空参构造什么都没做,就是一个空代码块 image.png
  • 有参构造函数
    • 有参构造的传参为Collection
    • 第一步调用了上面的空参
    • 第二部调用了addAll的操作并将参数传递了进去
    image.png