1. 常见实现类

ArrayList
LinkedList
Vector

2. ArrayList和Vector

  1. 数据结构和用法相同
  2. ArrayList是非线程同步(安全)的,适合单线程使用
  3. Vector是线程同步的,适合多线程使用
  4. 线程同步会降低程序性能,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);
    }
12-31 17:17