Skip to main content Link Menu Expand (external link) Document Search Copy Copied

1. ArrayList

是最常用的List实现类,内部是通过数组实现的,它允许对元素进行快速随机访问。 数组的缺点是每个元素之间不能有间隔,当数组大小不满足时需要增加存储能力, 就要讲已经有数组的数据复制到新的存储空间中。 当从ArrayList的中间位置插入或者删除元素时, 需要对数组进行复制、移动、代价比较高。因此,它适合随机查找和遍历, 不适合插入和删除。

//扩大了之前的1.5倍,使用>>1相当于除以2,用位运算更快。初始化,默认大小为10。
private static final int DEFAULT_CAPACITY = 10;

private void grow(int minCapacity) {
        // overflow-conscious code
        int oldCapacity = elementData.length;
        int newCapacity = oldCapacity + (oldCapacity >> 1);
        if (newCapacity - minCapacity < 0)
            newCapacity = minCapacity;
        if (newCapacity - MAX_ARRAY_SIZE > 0)
            newCapacity = hugeCapacity(minCapacity);
        // minCapacity is usually close to size, so this is a win:
        elementData = Arrays.copyOf(elementData, newCapacity);
    }

2. LinkedList

是用链表结构存储数据的,很适合数据的动态插入和删除,随机访问和遍历速度比较慢。 另外,他还提供了List接口中没有定义的方法,专门用于操作表头和表尾元素, 可以当作堆栈、队列和双向队列(因为它实现了Queue接口)使用。是双向链表。