关于ArrayList、LinkedList、Vector的总结和区别

ArrayList

总结:

  • ArrayList是List接口的一个数组的实现,随着向ArrayList中不断添加元素,其容量也自动增长

  • 非同步,线程不安全

  • 允许null元素,允许重复元素

  • iterator和listIterator方法返回的迭代器是快速失败的。(快速失败fail-fast:在创建迭代器之后,除非通过迭代器自身的remove或add方法从结构上对列表进行修改,否则在任何时间以任何方式对列表进行修改,迭代器都会抛出ConcurrentModificationException。因此,面对并发的修改,迭代器很快就会完全失败,而不是冒着在将来某个不确定时间发生任意不确定行为的风险)

  • 继承关系
    关于ArrayList、LinkedList、Vector的总结和区别

  • ArrayList基于数组来实现,所以有数组的特性,查找效率高,插入、删除效率低。因为可以通过下标来查找元素,每次添加删除元素的时候会移动其它元素。

  • ArrayList有扩容机制,也就是当添加元素的时候会校验是否需要扩容,第一次添加元素的时候会将数组长度置为10,之后添加元素的时候会判断当前所需数组长度和当前数组长度,如果两者相减大于零,就会扩大容量为原来的1.5倍。而后会用Arrays.copyOf();将元素拷贝到一个新数组完成扩容,所以ArrayList每次扩容,都会执行以上拷贝操作,这会十分耗时,所以要尽量少让ArrayList自动扩容,尽量用在能确定元素个数的情况下。

LinkedList

总结:

  • LinkedList是List接口的一个双向链表实现,因此查询效率低,添加、删除元素效率高。

  • 非同步,线程不安全

  • 允许重复,可以存储null元素

  • 继承关系
    关于ArrayList、LinkedList、Vector的总结和区别

Vector

总结:

  • Vector和ArrayList相似,是动态数组实现的,能够自动扩容

  • Vector里很多方法都用了synchronized修饰,线程安全

  • 允许重复,可以存储null元素

  • 快速查询和修改效率高,增加和删除元素效率低

  • 继承关系

关于ArrayList、LinkedList、Vector的总结和区别