![b0db7636f5b22a22f986b9d631706e98.png](https://i-blog.csdnimg.cn/blog_migrate/6723a06afc4e3ee18365aec36fdafc74.jpeg)
Vector底层是用数组实现的List,相关的方法都加了同步检查,因此“线程安全,效率低”。 比如,indexOf方法就增加了synchronized同步标记。
![5dd773bc19069a3537e7bea086fc2347.png](https://i-blog.csdnimg.cn/blog_migrate/afdfe26dc31d1b6cd304457f9f4fa013.png)
1、Vector的用法
import java.util.Iterator;
import java.util.Vector;
public class TestVector {
public static void main(String[] args) {
Vector vector = new Vector();
System.out.println("集合的容量:" + vector.capacity());
System.out.println("元素的个数:"+vector.size());
//添加元素
vector.add("hello");
vector.add(1, "world");
vector.addElement("java");
System.out.println(vector);
//删除元素
// vector.remove(0);
// vector.remove("java");
// vector.removeElement("world");
// vector.clear();
//获取元素
System.out.println(vector.get(0));
//遍历集合
//建议---节约内存,Iterator对象存在周期短
System.out.println("------使用Iterator(for)遍历------");
for(Iterator iterator = vector.iterator();iterator.hasNext();){
System.out.println(iterator.next());
}
System.out.println("------使用Iterator(while)遍历------");
Iterator ite = vector.iterator();
while(ite.hasNext()) {
System.out.println(ite.next());
}
}
}
2、JDK源码分析
(1)构造方法
public Vector() {
this(10);
}
public Vector(int initialCapacity) {
this(initialCapacity, 0);
}
public Vector(int initialCapacity, int capacityIncrement) {
super();
if (initialCapacity < 0)
throw new IllegalArgumentException("Illegal Capacity: "
+ initialCapacity);
this.elementData = new Object[initialCapacity];//new Object[10];
this.capacityIncrement = capacityIncrement;//0
}
(2)容量扩充
private void grow(int minCapacity) {
int oldCapacity = elementData.length;
int newCapacity = oldCapacity
+ ((capacityIncrement > 0) ? capacityIncrement : oldCapacity);//20
if (newCapacity - minCapacity < 0)//健壮性
newCapacity = minCapacity;
if (newCapacity - MAX_ARRAY_SIZE > 0)//健壮性
newCapacity = hugeCapacity(minCapacity);
elementData = Arrays.copyOf(elementData, newCapacity);
}
3、Vector与ArrayList的区别:
(1) Vector 的 add()方法是同步方法,ArrayList 的 add() 方法是非同步方法
(2) Vector 扩容每次扩充 1 倍 ,ArrayList 每次扩充 0. 5 倍
(3) Vector是在调用构造方法时,直接初始化容量为10,ArrayList 是在第一次调用添加方法时,初始化容量为 10
(4) Vector 的版本是 JDK1.0,ArrayList,JDK1.2 版
(5) Vector 是线程同步的,安全性高,效率低, ArrayList 是线程非同步的,安全性低,效率高
4、如何选用ArrayList、LinkedList、Vector
1. 需要线程安全时,用Vector。
2. 不存在线程安全问题时,并且查找较多用ArrayList(一般使用它)。
3. 不存在线程安全问题时,增加或删除元素较多用LinkedList。
尚学堂百战程序员
百战程序员_IT6000集_影响6000万学习IT的中国人【官网】