更新时间: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更适合使用。