1.特色node
LinkedList的底层实现是由一个双向链表实现的,能够从两端做为头节点遍历链表。安全
容许元素为null数据结构
线程不安全this
增删相对ArrayList快,改查相对ArrayList慢(curd都会根据index找到Node,折半查找来提升效率)spa
底层链表实现,没有扩容一说线程
2.链表节点code
静态内部类blog
private static class Node<E> { E item;//元素值 Node<E> next;//后置节点 Node<E> prev;//前置节点 Node(Node<E> prev, E element, Node<E> next) { this.item = element; this.next = next; this.prev = prev; } }
3.方法接口
add和remove系列的方法,涉及到节点指向的问题,由于是双向链表,因此除了肯定元素以外,还须要重置前置节点和后置节点element
1.前置节点和后置节点为null是分别判断
2.remove,元素的前置节点的next指向当前元素的next;当前元素的后置节点的prev指向当前元素的的prev;置空当前元素一节当前元素的节点指向,等待gc
3.add默认尾部追加
4.addAll中定义的中间节点变量,和插入位置的后一个节点 Node<E> pred, succ; ,在for循环中使用 pred = newNode; 步进指向插入的最后一个元素,modCount++;
get和set方法,都要先获取节点(经过位移运算折半查找,提高查询效率)
Node<E> node(int index)
ArrayList和LinkedList都有一个内部类ListItr,实现了ListIterator接口
能够使用listIterator进行迭代循环
LinkedList比较简单主要是数据结构双向列表的指向问题,画图很好理解