List-LinkedList源码分析

List-LinkedList源码分析

第一步:LinkedList初始化。

LinkedList linkedList = new LinkedList();

第二步:LinkedList中源码中的属性分析(大概)

  transient int size;
transient LinkedList.Node<E> first;
transient LinkedList.Node<E> last;
// 我们可以看到,我们链表维护了一个size(链表的长度)、first(头)节点 和last(尾)节点
//  first  可以作为整个链表的第一个元素,也就是头元素
// last 作为整个链表的最后一个元素。

第三步:Node分析

// 静态内部类,创建一个Node
private static class Node<E> {

// E可以解释为Objec类型
    E item;           //添加的数据
    LinkedList.Node<E> next;
    LinkedList.Node<E> prev;
      有参构造
    Node(LinkedList.Node<E> var1, E var2, LinkedList.Node<E> var3) {
        this.item = var2;
        this.next = var3;
        this.prev = var1;
        /*,
        在Node的结构中有个(item)属性、一个(next)节点、一个(prev)节点,
        以此证明了可以通过一个节点找到它的前一个节点,以及后一个节点,
        也就实现了双向绑定的效果,或者称其为 “双向链表”。*/


    }

第四步:add方法,通过add方法可以大概了解一下LinkedList为什么称之为双向链表的原因

public boolean add(E var1) {
    this.linkLast(var1);
    return true;
}//当我们查看LinkedList中add元素时,我们看到了add方法中调用了linkLast方法,点进去看一下

第五步:add方法中的linkLast方法

 void linkLast(E var1) {  //  传入一个对象类型的参数

    LinkedList.Node var2 = this.last;
    //  将last赋给 var2

    LinkedList.Node var3 = new LinkedList.Node(var2, var1, (LinkedList.Node)null);
    //将newNode的prev节点指向last,后节点指向null,因为创建的newNode永远都是作为last节点的,
    也就是链表的最后一个元素,所以next节点指向null

    this.last = var3;
    //last节点指向newNode也就是var3

     //如果链表的last节点为null的话则first节点将会指向var3,也就是新的节点,此时链表只有一个节点first和last都指向唯一的一个节点var3。
    //如果链表的last不为null,只需要将last节点的next指向这个var3节点就行了。

    if (var2 == null) {
        this.first = var3;
    } else {
        var2.next = var3;
    }

    ++this.size;
    //链表的长度+1;
    ++this.modCount;
}

总结:

**LinkedlList底层存储所使用的数据结构是链表而不是ArrayList中的数组,数组和链表是数据结构中的两个基本存储结构。 **

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值