Java常用集合类型-之ArrayList & LinkedList比较
1 ArrayList特点
public class ArrayList<E> extends AbstractList<E>
implements List<E>, RandomAccess, Cloneable, java.io.Serializable
- ArrayList是一个线性的表,数据存储也是线性连续的
- ArrayList底层实现是数组,所以每个元素都有自己的下标index
- ArrayList是一个可变的数组列表,可支持普通的增删改查操作
2 LinkedList特点
public class LinkedList<E>
extends AbstractSequentialList<E>
implements List<E>, Deque<E>, Cloneable, java.io.Serializable
- LinkedList是一个线性表,但是数据存储不是连贯的,数据与数据之间通过指针进行连接
- LinkedList底层使用双向链表实现的
- LinkedList可以支持链表、双端队列的常规操作,增删改查也是支持
3 LinkedList compares to ArrayList
这2种数据结构在数据量较小时,增删改查的效率差不多,但是到10K级别的时候增删改查的效率就有明显的差异了。
ArrayList底层实现的数组,基于这种数据结构查询和修改是很方便的,因为修改往往建立在查询的基础上,只需要通过数组对应的下标index找到对应的值就行了,效率很快。
ArrayList的插入和删除操作是代价很大的,假如我在某个位置删除一个元素,那么为了保证整个数据结构的连续的特性,删除元素后面的元素都得往前移动一位,增加操作则往后移动一位。
LinkedList底层实现的是双向链表,基于这种数据结构,查询和修改往往不是强项,因为不管怎样都得从头开始遍历。
但是删除和新增往往很快,特别是删除或新增在头、尾的时候,因为往往这些操作只需要修改指针指向就行了,没有其余的连带操作。
我们可以使用代码来分别测试这2个数据结构的增删改查的耗时。