ArrayList、Vector、linkedList的区别

58 阅读2分钟
  • ArrayList、 Vector都是基于存储元素Object array来实现的,他们会在内存中开辟一块连续折空间来存储,由于数据存储是连续的,因此。他们支持用序号下标来访问元素,同时索引数据的速度比较快,但是在插入元素时需要移动容器中的元素,所以对于数据的插入操作执行比较慢。两者最大的区别,就是synchronization同步的使用,没有一个ArrayList的方法时同步的,Vector的绝大多数方法,例如add、insert等,都是直接或间接同步的,所以Vector是线程安全的,其性能上要略逊于ArrayList。
  • ArrayList、linkedList都有一个初始化的容量的大小,当里面存储的元素超过这个大小时,就需要动态扩充他们的存储空间,为了提高程序的效率,每次扩充容量,不是简单地扩充一个存储单元,而是一次增加多个存储单元,ArrayList是基于动态数组实现的,而LinkedList则是基于链表实现的,同时二者是非线程安全的。
  • Vector默认扩充为原来的2倍,每次扩充空间的大小是可以设置的。
  • ArrayList默认扩充为原来的1.5倍,没有提供方法来设置空间扩充的方法
  • 共同点:三者均为可伸缩数组,即可以动态改变长度的数组
  • 使用:当对数据的主要操作为索引或只在集合的末端增加、删除元素时,使用ArrayList或Vector效率较高;当对数据的操作主要为指定位置的插入或删除操作时,使用LinkedList效率较高;当在多线程中使用容器时,即多个线程会同时访问该容器,选用Vector较为安全