LinkedList源码分析

LinkedList是底层基于链表的一种数据结构。其中每一个节点称为一个Node,结构如下:

从Node结构中可以看出,LinkedList是一个双向链表,那对它的操作就是对双向链表的操作。

首先来分析下它的属性:

transient int size = 0;

/**
 * Pointer to first node.
 * Invariant: (first == null && last == null) ||
 *            (first.prev == null && first.item != null)
 */
transient Node<E> first;

/**
 * Pointer to last node.
 * Invariant: (first == null && last == null) ||
 *            (last.next == null && last.item != null)
 */
transient Node<E> last;

 

构造函数:

  1. 无参构造函数
  2. 传入一个集合,然后会调用addAll()方法将集合中的元素加入链表

 

addAll(c):

底层调用的是addAll(size,c),它表示的是将集合C插入到第size个元素的后面,这里的size从1开始,即如果输入size是0的话,表示插入到链表的最前面,如果输入size是1的话,插入到链表的第一个元素后面。

链表的第一个元素的pre指针指向null,链表的最后一个元素的next指针指向null。

 

 

linkFirst(E e):在链表头部插入元素

linkLast(E e)类似,就是在尾部插入节点。

 

linkBefore(E e,Node<E> succ):在succ节点之前插入一个节点,要求succ不为空

 

unlinkFirst(Node<E> f) :删除头结点,并返回被删除的头节点的值,提供给外部的接口是removeFirst().....这个是我按照从上到下的顺序先看到了这个方法

 

普通的add()是在队尾添加元素:

 

remove()看来只是删除遇到的第一个相同的元素...如果还有一个节点值为o,这个节点是不会被删除的:

 

Node(int index):返回制定下标的元素,从0开始。即如果index为0,返回头结点

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值