LinkedList从JDK1.2开始使用,LinkedList实现了List接口和Deque接口,同时实现了列表和双向列表。并实现了Serializable序列化接口。
静态内部类:
- Node:
node对象储存了当前的元素、上一个元素节点,下一个元素节点。这是双向链表的基础,决定了数据之间的关联性。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; } }
LinkedList中的方法:
- public boolean addAll(int index, Collection<? extends E> c) ;
public boolean addAll(int index, Collection<? extends E> c) { //检测下标越界 checkPositionIndex(index); //指定集合c转化成数组 Object[] a = c.toArray(); //如果指定数组长度为0,返回false。 int numNew = a.length; if (numNew == 0) return false; Node<E> pred, succ; //如果最后一次循环(next为false),赋值 if (index == size) { succ = null; pred = last; //succ为根据index返回的一个非空对象 } else { succ = node(index); pred = succ.prev; } for (Object o : a) { //创建节点对象,包含当前元素对象,并包含前一个和后一个数据的节点 @SuppressWarnings("unchecked") E e = (E) o; Node<E> newNode = new Node<>(pred, e, null); //如果前一个节点为null,则newNode为第一个 if (pred == null) first = newNode; //如果前一个节点不是null,则前一个节点的下一个节点为newNode else pred.next = newNode; //开始下一个循环之前,把前一个节点设置为本次的newNode pred = newNode; } //如果当前节点为null,last为最后记录的节点。 if (succ == null) { last = pred; //如果当前节点不为null,记录节点的下一个节点为当前节点,当前节点的上一个节点为记录节点。 } else { pred.next = succ; succ.prev = pred; } //size为合并大小,操作次数++ size += numNew; modCount++; return true;