ArrayList 底层实现是一个动态数组列表,通过对列表的不断扩容来增加容量。
LinkedList 主要通过链表实现,将所有元素串联起来。
增:
ArrayList和LinkedList 的add()方法 相比较,测试结果:ArrayList 优于LinkedList,可能原因是两者都是在队尾添加元素,所以不牵扯到元素的移动,而linkedList的元素每次需要新建Node节点,来存储元素,增加了内存和执行次数,所以更加耗时。
LinkedList的 addFirst() 和 ArrayList 的 add(int 0, E e) 比较,L的速度明显优于A的插入速度,A每次插入都需要后面的元素后移一位。
附ArrayList每次增加容量的大小,首次扩容为10,后续扩容量为oldCapacity/2;
if (elementData == DEFAULTCAPACITY_EMPTY_ELEMENTDATA) {
minCapacity = Math.max(DEFAULT_CAPACITY, minCapacity);
}
int oldCapacity = elementData.length;
int newCapacity = oldCapacity + (oldCapacity >> 1);
删:
remove(E e) L 优于A, 原因 A 牵扯到元素移动。而L 只需要改变下一个节点指针即可。
查:
get(int index) 随机查找 A优于L, L会有指针移动,比较耗时。
contains(E e), indexOf(E e) 查找某一个元素 A 相对优于L.