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 = e,next = 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 = e,next = null,next的意思是就下一个,然后通过构造方法给成员变量赋值
通过构造方法将最新创建的节点和上次创建的节点相连,
但是构造方法只是让新建的节点和上次创建的节点相连,
而上次创建的节点并没有和新创建的节点连接
然后返回新节点对象的地址,newNode = 2222,last = 2222,
然后判断此时l是否为空,就是判断此时节点是否只有一个,而我们此时有两个节点所以走else,因为l = 1111,因为地址1111代表了头节点,所以将头节点的next就是下一个指向了新的节点
然后我们的新的节点对象就创建好了,并且将他和头节点相连在一起
总结:双向链表就是前面节点的next指向后面节点,而后面节点的prev指向前面的节点,理解起来不难,主要是电脑工具画图不太咋会用,画的不是特别好