您的位置:首页 > 其它

ArrayList、LinkedList、Vector的区别

2018-03-26 16:02 633 查看
    ArrayList、LinkedList、Vector都实现了List接口。List是按照对象进入的顺序保存对象,同时,他可以保存重复的对象。ArrayList、LinkedList、Vector类均在java.util包中,均为可伸缩数组,既可以动态改变长度的数组。

    ArrayList和Vector都是基于Object类型的数组类来实现的,他会在内存中开辟一块连续的空间来存储,由于数据存储是连续的,因此,他们支持用下标来访问元素,同时索引数据的速度比较快。但是在插入元素时需要移动容器中的元素,所以对数据的插入操作执行的比较慢。ArrayList和Vector都有一个初始化的容量大小(都为10),当里面存储的元素超过这个大小时就需要动态的扩充他们的存储空间。为了提高程序的效率,每次扩充容量,不是简单的扩充一个存储单元,而是一次增加多个存储单元。Vector默认扩充为原来的2倍,而ArrayList默认扩充为原来的1.5倍+1.

    ArrayList和Vector的最大区别就是synchronization(同步)的使用,没有一个ArrayList的方法是同步的(dd()、clear()、get()、indexOf()、remove()、sort()、toArray()、toString()等),而Vector的绝大多数方法(add,insert,remove,set,equals,hashcode等)都是直接或者间接同步的。所以Vector是线程安全的,ArrayList不是线程安全的。正是由于Vector提供了线程安全机制,其性能上也要略逊于ArrayList。Stack是Vector提供的一个子类,用于模拟"栈"这种数据结构(LIFO后进先出)。

    LinkedList是采用双向列表来实现的,因为他实现了List接口和Deque接口,可对他进行队列操作,也能将他当做双端队列。对数据的索引需要从链表头开始遍历,因此用于随机访问则效率比较低。但是插入元素时不需要对数据进行移动,因此插入效率较高。同时,LinkedList是非线程安全的容器。

    在实际使用时,当对数据的主要操作为索引或只在集合末端增加删除元素时,使用ArrayList和Vector效率比较高;当对数据的操作主要为指定的位置插入删除操作时,使用LinkedList效率较高,当在多线程中使用容器时,使用Vector较为安全。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息