线程同步与线程安全
Vector 是线程同步的,而ArrayList不是;
线程同步和线程安全意味着同一时间只允许一个线程访问数据;
Vector 类中的所有方法都是线程同步的,这就解析了为什么创建Vector 对象时就属于线程同步的了。
性能对比
就两者相比较,Vector 属于线程同步的,其性能相对低,而ArrayList 相对较快,因为ArrayList 允许两个或多个线程同时访问数据,而Vector 则限制同一时间只允许一个线程访问数据。
自动增长容量
Vector 默认按当前大小的两倍增长,而ArrayList 是按50%长度增长,当你往Arraylist 中插入元素(当填满元素)
Arraylist 的默认大小为10,Arraylist 会检查是否到了最后一个元素,然后会创建新的数组,复制原数组的数据到新数组,原数组由jvm回收。
1 | //ArrayList源码 |
设定增长大小
ArrayList 不能指定增长长度,而Vector 可以指定增长长度,你可以通过Vector 类的下面方法指定增长长度
1 | public synchronized void setSize(int i) { |
枚举
除了HashTable,Vector 是同时使用了枚举和迭代的唯一一个类,而ArrayList 只能用迭代器遍历一个ArrayList 对象。
官方定义
java.util.Vector
自jdk1.0就出现了,java.util.ArrayList
在jdk1.2中被作为Java 集合框架介绍过;在jdk1.2版本,Vector 类已经被重构实现List 接口。
reference: