ArrayList与Vector比较

简介: ArrayList与Vector比较

1.png这张图里的内容对我们学习Java来说,非常的重要,白色的部分是需要去了解的,黄色部分是我们要去重点了解的,不但要知道怎么去用,至少还需要读一次源码。绿色部分内容已经很少用了,但在面试题中有可能会问到,我们来看一个经常出现的面试题:Arraylist与Vector的区别是什么?


首先我们给出标准答案:

1、Vector是线程安全的,ArrayList不是线程安全的。

2、ArrayList在底层数组不够用时在原来的基础上扩展0.5倍,Vector是扩展1倍。


看上图Vector和ArrayList一样,都继承自List,来看一下Vector的源码

1.png

实现了List接口,底层是数组实现

实现了List接口,底层和ArrayList一样,都是数组来实现的。分别看一下这两个类的add方法,首先来看ArrayList的add源码

1.png

再看Vector的add源码

1.png

方法实现都一样,就是加了一个synchronized的关键字,再来看看其它方法,先看ArrayList的remove方法

1.png

再看Vector的remove方法

1.png

方法实现上也一样,就是多了一个synchronized关键字,再看看ArrayList的get方法

1.png

Vector的get方法

1.png

再看看Vector的其它方法

1.png

无一例外,只要是关键性的操作,方法前面都加了synchronized关键字,来保证线程的安全性。当执行synchronized修饰的方法前,系统会对该方法加一把锁,方法执行完成后释放锁,加锁和释放锁的这个过程,在系统中是有开销的,因此,在单线程的环境中,Vector效率要差很多。(多线程环境不允许用ArrayList,需要做处理)。


至于底层数组的扩容区别,这里就不带着大家读源码了,有兴趣的朋友大家自己读吧,底层代码几乎是一样的,不同的只是计算后的新数组长度不一致。


和ArrayList和Vector一样,同样的类似关系的类还有HashMap和HashTable,StringBuilder和StringBuffer,后者是前者线程安全版本的实现。希望以后大家在面试过程中,能说出个因为所以,而不是一味的去背面试题,唯有理解,无需再背。



目录
相关文章
|
6月前
|
存储 Cloud Native Linux
C++ 什么时候使用 vector、list、以及 deque?
C++ 什么时候使用 vector、list、以及 deque?
|
9月前
|
算法 安全
ArrayList、Vector、LinkList的区别
ArrayList、Vector、LinkList的区别
110 0
|
10月前
|
存储 自然语言处理
Ananagrams(map+vector)
Ananagrams(map+vector)
70 0
|
存储 安全 Java
arrayList和vector的区别
arrayList和vector的区别
|
存储 安全 Java
ArrayList 和 Vector 的区别是什么
ArrayList 和 Vector 的区别是什么
|
安全
集合不安全之 ArrayList及其三种解决方案【CopyOnWriteArrayList 、synchronizedList、Vector 】
集合不安全之 ArrayList及其三种解决方案【CopyOnWriteArrayList 、synchronizedList、Vector 】
166 1
集合不安全之 ArrayList及其三种解决方案【CopyOnWriteArrayList 、synchronizedList、Vector 】
|
存储 安全 算法
【JAVA】对比 Vector、ArrayList、LinkedList 有何区别?
我们在日常的工作中,能够高效地管理和操作数据是非常重要的。那么你知道,对比 Vector、ArrayList、LinkedList 有何区别?
122 0
|
安全 索引
ArrayList和LinkedList比较以及和Vector区别
ArrayList和LinkedList比较以及和Vector区别
|
安全 算法 Java
对比Vector、 ArrayList、 LinkedList有何区别
对比Vector、 ArrayList、 LinkedList有何区别
81 0
对比Vector、 ArrayList、 LinkedList有何区别
List集合与Set集合(ArrayList,LinkedList,Vector,HashSet,LinkedHashSet,可变参数)
List集合介绍及常用方法 import java.util.ArrayList; import java.util.Iterator; import java.util.List; /* java.util.List接口 extends Collection接口 List接口的特点: 1.有序的集
List集合与Set集合(ArrayList,LinkedList,Vector,HashSet,LinkedHashSet,可变参数)