本文基于 JDK 1.8.0_191
1. 源码对比
- 实现接口类对比
- 扩容机制对比
- 线程安全
1.1 实现接口类对比
public class ArrayList<E> extends AbstractList<E>
implements List<E>, RandomAccess, Cloneable, java.io.Serializable
public class LinkedList<E>
extends AbstractSequentialList<E>
implements List<E>, Deque<E>, Cloneable, java.io.Serializable
public class Vector<E>
extends AbstractList<E>
implements List<E>, RandomAccess, Cloneable, java.io.Serializable
-
它们都实现 List 接口,说明具备列表的增加、删除、遍历元素等特性。
-
ArrayList、Vector 额外实现 RandomAccess 接口,说明他们能在常量时间复杂度内快速随机访问元素。
-
LinkedList 额外实现 Queue 接口,具备队列的入队、出队等特性。
1.2 扩容机制对比
ArrayList
private static final int DEFAULT_CAPACITY = 10; // 定义初始大小
private static final int MAX_ARRAY_SIZE = Integer.MAX_VALUE - 8; // 定义列表存储元素数量最大值
private void grow(int minCapacity) {
// overflow-conscious code
int oldCapacity = elementData.length; // 现有元素数量
int newCapacity = oldCapacity + (oldCapacity