LinkedList底层是通过一个双向链表实现,需要注意的是LinkedList不是线程安全的。
1、主要参数
first:指向头结点;
last:指向尾节点;
2、构造函数
构造空的list
3、add方法源码解析。
首先将last保存在l,新建一个Node,让last指向newNode。如果是第一次添加(原先list是空),则l肯定为null,此时让first指向newNode,此时first和last都指向newNode,size加1;如果list不为空,则直接将newNode添加到list的尾部,即让原先list中的last节点的next指向newNode,此时first指向头结点,last指向newNode。
这里需要注意的是,在执行final Node newNode =new Node<>(l, e, null);的时候,会将last传到新节点,将新节点的Prev指向last,构成双向链表
①、List<String> linkList = new LinkedList<String>();
此时first=null;last=null;
②、第一次添加元素:linkList.add("A");
如图可以发现,第一次添加“A”后,头指针(first)和尾指针(last)都指向了A这个Node节点。
③、第二次添加元素:linkList.add("B");
图中双向箭头代表双向链表