ArrayList和LinkedList都是经常使用的集合工具,但真正原理却千差万别。
本质区别就是: ArrayList是数组结构,LinkedList是链表结构。
基于本质的区别,可以总结ArrayList和LinkedList的特点和不同点了。
1、增加元素到列表末尾时,当元素个数超过数组限制,ArrayList要进行数组扩容,这对性能有一定影响。而本质是链表的LinkedList则不需要进行扩容。
2、增加元素到任意位置时,本质是数组的ArrayList需要移动后面的元素重新排列,开销也会随着添加元素位置越靠前而越大,而本质是链表的LinkedList则只要改变前后的指向就行,性能开销远远小于ArrayList.
3、删除任意元素同上。
4、遍历性能对比:
构造一个拥有100万数据的ArrayList和等价的LinkedList,使用以上代码进行测试,测试结果的相对耗时如下表所示:
LinkedList因为是链表实现,所以在迭代遍历中占有很明显的优势,而在通过数组下标的遍历中,链表需要通过指针计算出下标来遍历,所以性能非常慢,而ArrayList因为是数组实现,通过数组下标遍历速度最快。