LinkedList源码分析

LinkedList的底层结构及相关介绍

								基于jdk1.8 的源码分析(后续更新)					

上图:
Linkedlist图
LinkList底层结构
LinkedList底层结构
底层结构:双向链表
LinkedList中维护了两个重要的属性,first,和last,分别指向首节点和尾节点。每个节点(Node类型) 里面又维护了三个属性item、next、prev,分别指向当前元素、下一个元素、上一个元素、最终实现手拉手的结构!当然,和ArrayList一样,还LinkedList中还维护着size【用于记录大小】【modCount用于记录更新次数】

看看Node及其构造器:
LinkedList底层结构

空参和含参构造器

构造器
需要注意的是,含参构造器拿的是其父类的addAll方法。

linkFirst(E e)

在这里插入图片描述

  • 这里提及first指针和last指针的注释:【指针条件】
    (first == null && last == null) || (last.next == null && last.item != null)
  • 进入方法体,首先暂存first指针指向的Node节点【final】
  • 初始化新的节点,prev域为空,next域为f
  • first指针指向newNode
  • 判断是否是第一个节点的添加:是:将last指针指向newNode,否:原头节点的prev域指向newNode
  • 最后更新size【容量】和modCount【更新次数】
  • 需要注意的是:此方法是用于设置头节点

linkLast(E e)

在这里插入图片描述

  • 和设置首节点的逻辑相反
  • 进入方法体:首先暂存last指针指向的节点
  • 初始化新的节点,next域为空,prev域为链表的最后一个节点
  • last指针指向新的节点
  • 判断是否是第一次设置尾节点:是:将first指向新节点,否:原尾节点的next域指向newNode
  • 最后更新size【容量】和modCount【更新次数】
  • 需要注意的是:此方法是用于设置尾节点

对比ArrayList

底层结构增删效率改查效率
ArrayList可变数组前面和中间的增删较低较高
LinkedList双向链表前面和中间的增删较高较低
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值