Java集合06 - ArrayList、LinkedList和Vector的区别

目录

1.实现接口

2.底层实现原理

3.扩容机制

4.线程安全

5.增删改查时间复杂度


1.实现接口

       ArrayList:实现自List、RandomAccess、Cloneable、Serializable,具有支持快速随机访问、克隆及序列化功能

       LinkedList:实现自List、Deque、Cloneable、Serializable,具有克隆及序列化功能

       Vector:同ArrayList

2.底层实现原理

       ArrayList:基于动态数组实现

       LinkedList:基于双向链表实现

       Vector:同ArrayList

3.扩容机制

       ArrayList:newCapacity = oldCapacity + (oldCapacity >> 1);底层为1.5倍扩容

       LinkedList:底层链表,无需扩容

       Vector:newCapacity = oldCapacity + ((capacityIncrement > 0) ? capacityIncrement : oldCapacity);可指定扩容因子,默认2倍扩容

4.线程安全

       ArrayList:非线程安全

       LinkedList:非线程安全

       Vector:线程安全,内部方法被synchronized修饰

5.增删改查时间复杂度

       ArrayList:

              add:直接添加元素,时间复杂度O(1),添加到指定位置,时间复杂度O(n),因还需移动其余元素位置

              remove:删除指定索引位置的元素,时间复杂度为O(n),因还需移动其余元素位置

              set:修改指定索引位置的元素,时间复杂度O(1)

              get:获取指定索引位置的元素,时间复杂度为O(1)

       LinkedList:

              add:直接添加元素,时间复杂度O(1),添加到指定位置,查询时间复杂度O(n),插入时间复杂度O(1)

              remove:删除指定的元素,查询时间复杂度O(n),删除时间复杂度O(1)

              set:修改指定位置的元素,查询时间复杂度O(n),修改时间复杂度O(1)

              get:获取指定位置的元素,时间复杂度O(n)

       Vector:同ArrayList

猜你喜欢

转载自blog.csdn.net/qq_36756682/article/details/111311577