ArrayList和Vector都实现了List接口,而List一共有ArrayList、Vector、LinkedList三个实现类。List可以存放多个元素,能够维护元素的顺序,并且允许元素的重复。
首先来看一个Vector的应用实例:
import java.util.Vector;
public class VetorTest2 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Staff st1 = new Staff("孙悟空",25);
Staff st2 = new Staff("猪八戒",25);
Vector vv = new Vector();
vv.add(st1);
vv.add(st2);
for(int i=0;i<vv.size();i++){
Staff staff = (Staff) vv.get(i);
System.out.println("员工:"+staff.name+"年龄:"+staff.age);
}
}
}
class Staff{
String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
int age;
public Staff(String name, int age) {
super();
this.name = name;
this.age = age;
}
}
通过上面的Code可以看出,在使用方法上,Vector与ArrayList没有什么区别,但是在2个方面:线程安全、存储空间增长。
1、ArrayList是最常用的List实现类,内部是通过数组实现的,它允许对元素进行快速随机访问。并且是异步的。
它的缺点在于数据存储之间不能有间隔,当空间大小不能满足数据的存储时就要将已有的数据复制到新的空间。当对ArrayList进行插入或者删除时,需要对数组进行复制、移动,代价比较高。因此ArrayList适合查找、遍历,不适合插入或者删除。
2、Vector和ArrayList一样也是通过数组实现的,不同的是它支持线程同步但,即某一时刻只有一个线程访问Vector。是线程同步需要很高的性能开销,因此访问它比访问ArrayList慢。
3、LinkedList是用链表结构存储数据的,很适合数据的动态插入和删除,随机访问和遍历速度比较慢。
总结:
1、ArrayList和Vector是通过数组实现的,而且当数组的大小不够时,需要重新开辟空间,然后将元素拷贝过去。
2、ArrayList是异步的,属于非线程安全。而Vector是同步的,属于线程安全。但是大多数情况下不使用Vector,因为线程安全需要更多的内存开销。
3、Vector在内存不够时,自动增长为原来的1倍 。而ArrayList自动扩展为原来的为50%+1个。