1. 常见实现类
ArrayList
LinkedList
Vector
2. ArrayList和Vector
- 数据结构和用法相同
- ArrayList是非线程同步(安全)的,适合单线程使用
- Vector是线程同步的,适合多线程使用
- 线程同步会降低程序性能,ArrayList性能高于Vector
3. ArrayList的源码
3.1 数据结构是什么
transient Object[] elementData;
3.2 默认容量是多少
/**
* Default initial capacity.
*/
private static final int DEFAULT_CAPACITY = 10;
3.3 如何扩容的
private void grow(int minCapacity) {
// 获得原来数组的长度
int oldCapacity = elementData.length;
// oldCapacity >> 1 相当于除以2,新容量是原来容量的1.5倍
int newCapacity = oldCapacity + (oldCapacity >> 1);
if (newCapacity - minCapacity < 0)
newCapacity = minCapacity;
if (newCapacity - MAX_ARRAY_SIZE > 0)
newCapacity = hugeCapacity(minCapacity);
// 把旧数据数据复制到新数组中,替换原来数组
elementData = Arrays.copyOf(elementData, newCapacity);
}