(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(...));