Vector
Vector类,也称为向量类,它实现了动态数组,用于元素数量变化的对象数组。
Vector类也是以索引0开始的下标表示元素的位置。
当Vector对象创建后,数组的元素个数会随着Vector集合中元素个数的增大和缩小而自动变化。
Vector类中的大多数方法是同步的,使用synchronized修饰的,所以线程安全,但效率低。
添加元素
在Java中,Vector添加元素有两种方式:队尾添加和指定位置添加
// add 方法默认将元素添加到队尾
vector.add("wei");
vector.add("ijunfu");
vector.add(12);
vector.add(17);
// 将元素添加到指定索引位置,原位置及其后面的元素集体向后移一位
vector.add(2, 29);
修改元素
vector.set(1, 29); // 修改指定索引位置上的元素
删除元素
vector.remove("wei");
vector.remove(Integer.valueOf(12)); // 删除指定元素
vector.remove(2); // 删除指定索引位置上的元素
需注意的是,当删除int类型的元素时,需要使用其包装类型Integer,否则会将其认为是索引,可能会引起异常
获取集合大小
int size = vector.size();
System.out.println("size: " + size);
判断集合是否为空
boolean empty = vector.isEmpty();
System.out.println(empty);
获取指定索引位置上的元素
Object o = vector.get(0);
System.out.println(o.toString());
将Vector转为数组
Object[] arrs = vector.toArray();
System.out.println(Arrays.asList(arrs));
验证是否线程安全
Vector vector = new Vector();
Runnable run = new Runnable() {
@Override
public void run() {
for(int i=0; i<100; i++) {
vector.add(i);
}
}
};
Thread t1 = new Thread(run);
Thread t2 = new Thread(run);
Thread t3 = new Thread(run);
t1.start();
t2.start();
t3.start();
// 保证线程执行完毕后,主线程打印结果
try {
t1.join();
t2.join();
t3.join();
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
System.out.println("size: " + vector.size());
}
创建三个线程一起向Vector加入元素,每个线程添加100个元素。上述代码无论执行多少次,最后结果都是300。所以,Vector是线程安全的。