1、ArrayList和LinkedList都实现了List接口、Cloneable接口和Serializable接口,另外LinkedList额外实现了Deque接口。
2、LinkedList实际上是一个双端队列。
public class ArrayList<E> extends AbstractList<E> implements List<E>, RandomAccess, Cloneable, Serializable
public class LinkedList<E> extends AbstractSequentialList<E> implements List<E>, Deque<E>, Cloneable, Serializable
3、ArrayList底层是使用数组进行实现的,主要的特点就是查询元素速度快,增加元素、删除元素的效率可能就低一些。
LinkedList底层是使用链表实现的,主要的特点就是增加元素、删除元素的效率可能就高一些,但是查询元素速度比较慢。
transient Object[] elementData; // ArrayList底层
transient LinkedList.Node<E> first;
transient LinkedList.Node<E> last; // LinkedList底层
4、由于底层的数据结构不同,他们所适应的场景也是不同的,ArrayList更适合随机查询,而LinkedList更适合添加和删除元素。