ArrayList底层是由链表组成的一种数据结构,能够进行动态的增删改查html
LinkedList通常用于对数据的存储java
带上问题去找答案node
public class LinkedList<E> extends AbstractSequentialList<E> implements List<E>, Deque<E>, Cloneable, java.io.Serializable { transient int size = 0; /** * Pointer to first node. * Invariant: (first == null && last == null) || * (first.prev == null && first.item != null) */ transient Node<E> first; /** * Pointer to last node. * Invariant: (first == null && last == null) || * (last.next == null && last.item != null) */ transient Node<E> last;
add (addFirst addLast相似)安全
public boolean add(E e) { linkLast(e); return true; } void linkLast(E e) { final Node<E> l = last;//获取last final Node<E> newNode = new Node<>(l, e, null);//建立Node last = newNode;//last为新的节点 //若是当前l为空,表示是第一次添加,那么first也会=新的节点 //若是第一次添加就是first=last=newNode if (l == null) first = newNode; //l不为空也就是说不是第一次添加 //当前的last=newNode,而如今因为建立Node的时候已经吧newNode.prev=last也就是说如今是维护双向的关系 else l.next = newNode; size++; modCount++; } //建立Node参数prev上一个,element当前元素,next下一个。添加的时候给定prev为last,element为当前,next为空 Node(Node<E> prev, E element, Node<E> next) { this.item = element; this.next = next; this.prev = prev; }
删除对象 linkedList能够存储null数据结构
public boolean remove(Object o) { //删除元素为空从first开始遍历判断为空 if (o == null) { for (Node<E> x = first; x != null; x = x.next) { if (x.item == null) { unlink(x); return true; } } } else { for (Node<E> x = first; x != null; x = x.next) { if (o.equals(x.item)) { unlink(x); return true; } } } return false; } /* 解除关系 1.将当前Node的prev next item都设置为空 2.将prev节点的next直接指向next(若是prev为空将first指向next) 3.强next节点的prev直接指向prev(若是next为空将last指向prev) */ E unlink(Node<E> x) { // assert x != null; final E element = x.item;//当前元素 final Node<E> next = x.next;//当前元素的下一个节点 final Node<E> prev = x.prev;//当前元素的上一个节点 if (prev == null) {//若是上一个节点为空,那么first将直接指向next first = next; } else { prev.next = next;//当前元素不为空将prev的next直接指向当前元素的下一个节点() x.prev = null; } if (next == null) { last = prev; } else { next.prev = prev; x.next = null; } x.item = null; size--; modCount++; return element; }
获取oracle
由于是链表结构,只支持getFirst,getLast
链表没有终点不须要扩容this
线程不安全线程