LinkedList源码解析

LinkedList


初始化设置:

1、初始头节点

transient Node<E> first;

2、初始尾节点

transient Node<E> last;

可以看到,初始时头节点和尾节点都是null。


构造方法:

1、无参构造方法

 public LinkedList() {
 
 }

2、参数为Collection对象的构造方法

public LinkedList(Collection<? extends E> c) {
        this();
        addAll(c);
}

添加内容:

1、我们常用到的添加元素的方法

public boolean add(E e) {

        linkLast(e);
        return true;

}

2、链表添加元素的方法

void linkLast(E e) {
        final Node<E> l = last;
        final Node<E> newNode = new Node<>(l, e, null);
        last = newNode;
        if (l == null)
            first = newNode;
        else
            l.next = newNode;
        size++;
        modCount++;
}

①当LinkedList中没有任何元素时,此时我们插入第一个元素。

此时,first(头节点)和 last(尾节点)都是null,所以last会指向newNode,同时first也会指向newNode。如图所示:
在这里插入图片描述

②当LinkedList中有很多元素的时候,此时我们插入一个元素。

1、没插入之前:先让l指向到 last,当前链表的状态

在这里插入图片描述
2、然让newNode 的前驱指向到 l 中,而且让last指向到newNode。(可以这么认为此时的newNode就是last)。

在这里插入图片描述

3、最后一步,让l.next指向到newNode上,添加完成。

在这里插入图片描述

此时LinkedList添加元素成功。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值