ArrayList和LinkedList比较

(1)继承关系

  ArrayList和LinkedList都实现了List接口,并都实现了List接口中的列表操作。而LinkedList在此之外,还实现了Deque接口,因此还实现了在列表头尾进行增删查的功能,并提供了统一的方法。所以LinkedList在数据结构上来看,还可以被用作堆栈和队列。

  下面是List的接口中可选的列表操作方法,被ArrayList和LinkedList实现(实现部分可选方法):

boolean add(E e) 向列表尾部添加指定的元素(可选)
void add(int index, E e) 向列表中的指定位置插入指定元素(可选)
boolean addAll(Collection<? extends E> c) 添加指定collection中的所有元素到此列表的尾部(可选)
boolean addAll(int index, Collection<? extends E> c) 将指定collection中的所有元素都插入到列表中的指定位置(可选)
void clear() 从列表中移除所有元素(可选)
E remove(int index) 移除列表中指定位置的元素(可选操作)
boolean remove(Object o) 从列表中移除第一次出现的指定元素(可选操作)
boolean removeAll(Collection<?> c) 从列表中移除指定collection中包含的其所有元素(可选操作)
boolean retainAll(Collection<?> c) 仅在列表中保留指定collection中所包含的元素(可选操作)
E set(int index, E element) 用指定元素替换列表中指定位置的元素(可选操作)

   Deque中用于首尾位置操作的相关方法,被LinkedList实现:

void addFirst(E e) 将指定元素插入此双端队列开头(链表)
void addLast(E e) 将指定元素插入此双端队列的末尾(链表)
E getFirst() 获取,但不移除此双端队列的第一个元素(链表)
E getLast() 获取,但不移除此双端队列的最后一个元素(链表)
E removeFirst() 获取并移除此双端队列第一个元素。(链表)
E removeLast() 获取并移除此双端队列的最后一个元素。(链表)
boolean offer(E e) 将指定元素添加到此双端队列的尾部(队列)
boolean offerFirst(E e) 将指定的元素插入此双端队列的开头(队列)
boolean offerLast(E e) 将指定元素插入此双端队列的尾部(队列)
E peek()   获取,但不移除此双端队列的第一个元素,如果此双端队列为空,则返回 null。(栈)
E peekFirst() 获取,但不移除此双端队列的第一个元素,如果此双端队列为空,则返回 null。(栈)
E peekLast() 获取,但不移除此双端队列的最后一个元素,如果此双端队列为空,则返回 null。(栈)
E poll() 获取并移除此双端队列所表示的队列的头部,如果此双端队列为空,则返回 null
E pollFirst() 获取并移除此双端队列的第一个元素;如果此双端队列为空,则返回null
E pollLast() 获取并移除此双端队列的最后一个元素;如果此双端队列为空,则返回 null
E pop() 从此双端队列所表示的堆栈中弹出一个元素。(栈)
void  push(E e) 将一个元素推入此双端队列所表示的堆栈(栈)

  add方法和offer方法在功能上是一样的,只是在操作不同数据结构时的习惯称呼,一般操作链表称谓add,操作队列称谓offer。

(2)同步问题

  ArrayList和LinkedList的实现都没有保证同步,如果想要保证同步可以使用 Collections.synchronizeList来包装该"列表”:

  List list = Collections.synchronizeList(new LinkedList(...)); 

原文地址:https://www.cnblogs.com/liujinyao/p/4723708.html