Vector与ArrayList都是List接口的实现类,它们都代表链表形式的数据结构。但是,它们的实现和适用场景却有所区别。
SUN公司提供的JDK开发包中,包含了一个src.zip的文件,里面是java主要基础类的源代码。通过打开Vector.java和ArrayList.java两个源文件,可以发现,它们二者的实现非常相似,都是用一个对象数组来存储元素的。但是,Vector的大多数成员方法都会加上synchronized关键字,也就是说Vector线程是安全的。
由于Vector操作成员的方法必须保证同步,因此它的执行效率没有ArrayList高。所以,一般情况下,只有在必须保证同步的地方才使用Vector,而多数情况下,使用ArrayList更适合一些。
以下是一段使用Vector和ArrayList的示例代码:
import java.util.ArrayList;
import java.util.Vector;
public class ListTest {
public static void main(String[] args) {
Vector<String> v=new Vector<String>(); //创建Vector对象
v.add("hello"); //加入元素
v.remove("hello"); //删除元素
System.out.print(v.size()); //得到vector的元素数量
ArrayList<String> al=new ArrayList<String>();
al.add("hello");
al.remove("hello");
System.out.println(al.size()); //得打链表对象中的元素数量
}
}
总结:Vector是线程安全的,因为它操作元素的方法都是同步方法,而ArrayList则不是。开发过程中应该根据需要进行选择,如果需要保证线程安全的地方则需要使用Vector,而不必要的时候则无需使用Vector,因为ArrayList效率会高一些。