JAVA容器LinkedList底层源码分析①

LinkedList是双链表的实际模型,使用双向链表进行存储的
特点:查询效率低,增删效率高

增删效率高是为啥呢?让我们来分析一下底层的源码:

大家都知道LinkedList有两个添加的方法:1、addLast() 2、addFirst()

        1、addLast()让我们分析一下他的源码,以下是源码所涉及到的代码

 

 我们来一点一点的看,首先我们可以看到addLast里边又调用了LinkedLast方法,所以LinkedLast方法才是最后加入节点对象的主要方法,所以我们主要看LinkedLast方法:

 

首先我们会传入一个元素,然后我们会声明了一个节点对象L指向last,因为是第一个节点而last并没有初始值所以last=null,那么l=null

然后我们创建了一个新的节点对象newNode传入参数(l,e,null),此时我们来看Node的构造方法,prev = null,prev的意思就是上一个,element = enext = null,next的意思是就下一个,因为此时我们这个节点即是头节点也是尾节点,所以上一个下一个都为null,然后通过构造方法给成员变量赋值

         

 

然后返回Node对象的地址给newNode,此时的newNode=1111

然后执行last=1111,然后进行判断L是否为空,就是为了判断此时节点是不是只有一个,是的话执行first=1111,意思就是此时的节点即是头节点也是尾节点

 然后size就是记录节点个数的,此时创建第一个节点就完成了

创建好第一个头节点过后,我们来添加值继续创建节点:

当我们再次通过LinkedLast或者add方法的时候,都会执行LinkedLast方法,因为上次我们创建了头节点了,first = 1111,last = 1111,那么此时声明l = last,所以l = 1111

然后我们创建了一个新的节点对象newNode传入参数(l,e,null),此时我们来看Node的构造方法,prev = 1111,prev的意思就是上一个,element = enext = null,next的意思是就下一个,然后通过构造方法给成员变量赋值

 

通过构造方法将最新创建的节点和上次创建的节点相连

但是构造方法只是让新建的节点和上次创建的节点相连

上次创建的节点并没有和新创建的节点连接

 然后返回新节点对象的地址,newNode = 2222,last = 2222

然后判断此时l是否为空,就是判断此时节点是否只有一个,而我们此时有两个节点所以走else,因为l = 1111,因为地址1111代表了头节点,所以将头节点的next就是下一个指向了新的节点 

然后我们的新的节点对象就创建好了,并且将他和头节点相连在一起

总结:双向链表就是前面节点的next指向后面节点,而后面节点的prev指向前面的节点,理解起来不难,主要是电脑工具画图不太咋会用,画的不是特别好

 

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值