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個。