JAVA-基础知识-ArrayList,LinkedList,Vector的区别

混江龙づ霸主 提交于 2019-12-02 12:55:40

JAVA-基础知识-ArrayList,LinkedList,Vector的区别

vector与ArrayList底层实现都是数组,基本的操作差不多就不单独写了。另外java官方已经不建议使用Vector了,不过具体原因还没有进行了解。

存储结构

  • ArrayList和Vector是按照顺序将元素存储(从下表为0开始),默认的初始容量都是10,插入删除元素时,需要使部分元素移位。
  • ArrayList和Vector是基于数组实现的,LinkedList是基于双向链表实现的(含有头结点)。

线程安全

  • ArrayList,LinkedList不具有有线程安全性,如果在并发环境下使用它们,可以用Collections类中的静态方法synchronizedList()对ArrayList和LinkedList进行调用即可。
  • Vector实现线程安全的,即它大部分的方法都包含关键字synchronized,但是Vector的效率没有ArraykList和LinkedList高。

扩容机制

  • ArrayList与Vector底层均使用数组实现,再添加元素时,若容量不足,需要进行扩容,ArrayList扩容为之前的1.5倍,而Vector默认情况下扩容为2倍,扩容之后再将原数据拷贝到新建的数组中去。
  • Vector可以设置容量增量,ArrayList不行。在Vector中,有capacityIncrement:当大小大于其容量时,容量自动增加的量。如果在创建Vector时,指定了capacityIncrement的大小,则Vector中动态数组容量需要增加时,如果容量的增量大于0,则增加的是大小是capacityIncrement,如果增量小于0,则增大为之前的2倍。

增删改查效率

  • ArrayList和Vector中,从指定的位置检索一个对象,或在集合的末尾插入、删除一个元素的时间是一样的,时间复杂度都是O(1)。但是如果在其他位置增加或者删除元素花费的时间是O(n)。
  • LinkedList中,在插入、删除任何位置的元素所花费的时间都是一样的,时间复杂度都为O(1),但是他在检索一个元素的时间复杂度为O(n).
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!