我们基于下面这段代码进行分析
进入add方法后调用的是linkLast方法
这是add方法真正的底层逻辑,首先将last值赋给l节点,此时的l为null,然后再创建新节点的时候将l作为前向指针传入,将节点中的next指针也赋值为null,之后让last节点指向新节点。然后进行if判断如果l为null就将first也指向新节点。这是第一次添加的过程
下面我们看第二次添加的过程 ,最终还是执行linkLast方法,只不过此时的last指向第一个节点,所以l也指向第一个节点,然后创建一个新节点将l传入,所以新节点中的prev指向第一个节点,接着将last的指向改为新节点。由于此时的l不为null,所以进入else,将首节点中的next执向新节点接着我们看一下它的remove方法,默认删除的首元素
首先将first的引用保存起来,真正执行删除方法的是unlinkFirst().
首先将节点中的值和next指针保存起来,接着将他们置为null,通过GC,然后将头节点的指向改为next,此时的next不为null进入else,然后将next的prev置为null,这样头节点就和下一个节点断开了联系