Java中Vector和ArrayList的区别

时间:2023-01-13 15:22:03

Vector

首先Vector和ArrayList实现了List接口。
Vector出现的版本是1.0,是一个线程安全的类,Vector在1.2之后拥有了ArrayList的所有功能,Vector拥有很多独有方法(ArrayList出现之前),下面列举几个:

void addElement(E obj) 
将指定的组件添加到此向量的末尾,将其大小增加 1
void setElementAt(E obj, int index)
将此向量指定 index 处的组件设置为指定的对象。
boolean removeElement(Object obj)
从此向量中移除变量的第一个(索引最小的)匹配项。
void removeElementAt(int index)
删除指定索引处的组件。

等等这些都是Vector对元素的操作,更多具体的请查看API。
Vector还拥有特有的迭代方法,直接上代码:

        Enumeration<String> elements = vector.elements();
while(elements.hasMoreElements()){
String str=elements.nextElement();
}

ArrayList

ArrayList出现在1.2版本,ArrayList 是Vector 的替代类,重效率轻安全。
下面是ArrayList的一些方法(Vector在1.2之后已拥有):

boolean add(E e) 
将指定的元素添加到此列表的尾部。
E set(int index, E element)
用指定的元素替代此列表中指定位置上的元素。
E remove(int index)
移除此列表中指定位置上的元素。

等等,还有ArrayList的迭代方式为(当然Vector也可用):

        Iterator<Book> iterator=list.iterator();
while(iterator.hasNext()){
Book b=iterator.next();
}

}

Vector和ArrayList的小结

相同点:
1. 底层都是使用数组实现。
2. 都是List的子类
不同点(主要关注):
1. 出现的版本不同,Vector 是1.0出现的。ArrayList是1.2出现的。
2. Vector 是一个线程安全的容器,对元素的操作效率相比ArrayList 要低。 ArrayList 是一个线程非安全的 。效率要更高一些。
3. Vector 类中包含了一些独有的对元素操作的方法。都是比较老的版本了。
4. 初始容量(调用空参数的构造器时)和扩容规则不同。
ArrayList的断点测试:

    public static void main(String[] args) {
List<String> list=new ArrayList<>();
list.add("1");
list.add("2");
list.add("3");
list.add("4");
list.add("5");
list.add("6");
list.add("7");
list.add("8");
list.add("9");
list.add("10");
list.add("11");
}

Java中Vector和ArrayList的区别

Java中Vector和ArrayList的区别

Java中Vector和ArrayList的区别

可见调用空参构造器时,ArrayList的初始容量为0,当添加第一个元素时,容量变为10,当超过10个元素时,容量变为原来的1.5倍(即10*1.5=15当然是取整)。

Vectord的断点测试:

    public static void main(String[] args) {
Vector<String> vector=new Vector<>();
vector.addElement("hello1");
vector.addElement("hello2");
vector.addElement("hello3");
vector.addElement("hello4");
vector.addElement("hello5");
vector.addElement("hello6");
vector.addElement("hello7");
vector.addElement("hello8");
vector.addElement("hello9");
vector.addElement("hello10");
vector.addElement("hello11");
}

Java中Vector和ArrayList的区别

Java中Vector和ArrayList的区别
可见Vector的初始容量为10(调用空参构造器),扩容规则为现有容量的2倍。