更新时间:2023-03-23 来源:黑马程序员 浏览量:
ArrayList和Vector都是实现了List接口的动态数组,它们的实现方式很相似,但也有以下几点不同:
1.线程安全性:Vector是线程安全的,而ArrayList则不是线程安全的。也就是说,在多线程环境下,Vector比ArrayList更适合使用。
2.扩容方式:当需要增加容量时,Vector默认增加原来容量的一倍,而ArrayList增加原来容量的一半。这也是为什么在使用ArrayList时,如果能够提前确定List的大小,最好使用带初始容量的构造函数。
接下来我们使用Java代码演示ArrayList和Vector的不同之处:
import java.util.ArrayList;
import java.util.List;
import java.util.Vector;
public class Main {
public static void main(String[] args) {
List<String> arrayList = new ArrayList<>();
List<String> vector = new Vector<>();
// 向ArrayList和Vector中添加元素
for (int i = 0; i < 10; i++) {
arrayList.add("ArrayList " + i);
vector.add("Vector " + i);
}
// 遍历ArrayList和Vector
System.out.println("ArrayList:");
for (String s : arrayList) {
System.out.println(s);
}
System.out.println("\nVector:");
for (String s : vector) {
System.out.println(s);
}
// 测试Vector的线程安全性
new Thread(() -> {
for (int i = 0; i < 10; i++) {
vector.add("Thread " + i);
}
}).start();
// 等待一段时间,确保子线程执行完毕
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
// 再次遍历Vector,可以看到新加入的元素
System.out.println("\nVector after adding elements in another thread:");
for (String s : vector) {
System.out.println(s);
}
}
}
输出结果:
ArrayList:
ArrayList 0
ArrayList 1
ArrayList 2
ArrayList 3
ArrayList 4
ArrayList 5
ArrayList 6
ArrayList 7
ArrayList 8
ArrayList 9
Vector:
Vector 0
Vector 1
Vector 2
Vector 3
Vector 4
Vector 5
Vector 6
Vector 7
Vector 8
Vector 9
Vector after adding elements in another thread:
Vector 0
Vector 1
Vector 2
Vector 3
Vector 4
Vector 5
Vector 6
Vector 7
Vector 8
Vector 9
Thread 0
Thread 1
Thread 2
Thread 3
Thread 4
Thread 5
Thread 6
Thread 7
Thread 8
Thread 9
可以看到,ArrayList和Vector的使用方式很相似,但在多线程环境下,Vector比ArrayList更适合使用。