您的位置:首页 > 编程语言 > Java开发

【java】ArrayList、Vector、LinkedList的区别

2015-03-20 21:48 585 查看
ArrayList、Vector、LinkedList同属于List接口,都存在于java.util包中,都是可伸缩数组,可以动态改变长度。
★ArrayList和Vector都是基于存储元素Object[] array来实现的,它们会在内存中开辟一段连续的空间来存储,因为数据存储是连续的,所以它们支持用下标的方式来访问数据,而且索引数据的速度会比较快,也正因为存储是连续的,在其中插入新的元素时需要移动数据,所以在插入数据时执行速度会比较慢。
在未定义容量大小时,ArrayList和Vector都有一个初始化容量的大小,当里面存储的数据超过这个初始化容量时,它们会动态的扩充存储空间,而为了提高程序的运行效率,每次扩充并不只是单纯增加一个存储单元,ArrayList默认扩充为原来的1.5倍不能自定义设置每次扩充空间的大小),Vector会默认扩充为原来的2倍可以自定义设置扩充空间的大小)。
ArrayList和Vector最大的区别就是synchronization同步的使用,ArrayList中没有方法是同步的,而Vector中绝大多数方法都是直接或间接同步的,所以Vector是线程安全的而ArrayList不是线程安全的,而也正是因为Vector的线程安全机制,使得其性能不如ArrayList。
类似于数据结构中顺序表的顺序存储

★LinkedList采用双向列表,因为其数据存储不是顺序存储的,因此访问数据时需要从头开始遍历,所用当有随机访问的需求时,使用LinkedList效率会比较低,但是它的优点是在进行数据插入时,不需要移动数据,LinkedList是非线程安全的容器。
类似于数据结构中顺序表的链式存储
★选择原则:
(1)当对数据的操作主要是索引或者只在集合末端进行数据的增删时,使用ArrayList和Vector效率会比较高。
(2)当对数据的操作主要是在指定位置进行增删时,使用LinkedList效率会比较高。
(3)当需要多个线程同时访问容器时,使用Vector比较安全
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: