类集常考面试题(ArrayList、Vector、LinkedList的区别)

版权声明:白小姐 https://blog.csdn.net/bailerong123/article/details/89473983

ArrayList、Vector和LinkedList有什么区别

ArrayList、Vector、LinkedList类均在java.uti包中,均为可伸缩数组,即可以动态改变长度的数组。
ArrayList和Vector都是基于存储元素的Object[] array来实现的,它们会在内存中开辟一块连续的空间来存储,由于数组存储是连续的,因此,它们支持用序号(下标)来访问元素,同时索引数据的速度比较快
但是在插入元素时需要移动容器里面的元素,所以对数据的插入操作执行得比较慢。ArrayList和Vector都有一个初始化的容量大小,当里面存储的元素超过这个大小时就要动态的扩充他们的存储空间。为了提高效率,每次扩充容量,不是简单的扩充一个存储单元,而是一次性增加多个存储单元。Vector每次扩充为原来的两倍(扩充大小是可以自己设置得),而我们的ArrayList默认扩充为原来的1.5倍(没有提供方法来设置空间扩充的方法)
ArrayList与Vector最大的区别就是synchronization(同步)的使用,没有一个ArrayList的方法是同步的,而Vector的绝大部分方法都是同步的例如(add、insert、remove、set、equals、hashcode等)都是直接或者是间接的同步的。所以Vector是线程安全的,ArrayList不是线程安全的。正是由于Vector提供了线程安全机制,其性能上也会略逊于ArrayList。
LinkedList是采用双向列表来实现的,对数据的索引需要从列表头开始遍历,因此用于随机访问效率比较低,但是插入元素不需要对数据进行移动,因此插入的效率比较高。同时,LinkedList是非线程安全的容器。
那么我们在实际的使用过程中,如何从这几种容器中选择适合的进行使用呢?
当对于数据的主要操作位索引或者只是在末端的位置插入或者是删除操作时,使用ArrayList或者Vector的效率比较高;当多线程中使用容器时(即多个线程会同时访问该容器时),选用Vector较为安全。

敲黑板

ArrayList

1、数组
2、线程不安全
3、每次扩容为原来的1.5倍
4、不可以设置空间扩容方法

Vector

1、数组
2、线程安全
3、每次扩容为原来的2倍
4、可以设置空间扩容方法

LinkList

1、双向链表
2、随机访问效率较低,随即插入效率高。

猜你喜欢

转载自blog.csdn.net/bailerong123/article/details/89473983
今日推荐