Java 中 ArrayList 和 Vector 的区别

2025年5月5日 | 阅读 4 分钟

ArrayList

Java中的ArrayList是Java集合框架中的一个动态数组实现。这是一个可以随着更多元素的添加而自动增长的大型数组。

ArrayList类定义在java.util包中,因其易用性和灵活性而非常常用。它们提供的灵活性在于,你不需要在创建ArrayList时确定其大小,这与Java中的标准数组类似。因此,它比传统数组灵活得多。

Java中的ArrayList也可以包含重复元素。它实现了List接口,因此我们可以使用List接口的所有方法。ArrayList在内部维护插入顺序。

阅读更多 Java ArrayList

Vector

Vector类似于一个可以增长或收缩其大小的动态数组。与数组不同,我们可以在其中存储任意数量的元素,因为没有大小限制。它是Java集合框架的一部分,从Java 1.2开始。它属于java.util包,并实现了List接口,因此我们可以使用List接口的所有方法。

建议仅在需要线程安全实现时才使用Vector类。如果你不需要使用线程安全实现,你应该使用ArrayList;在这种情况下,ArrayList的性能会更好。

它与ArrayList相似,但有两个区别——

  • Vector 同步。
  • Java Vector包含许多不是Collections框架一部分的遗留方法。

阅读更多Java Vector

ArrayList 与 Vector

特性ArrayListVector
线程安全ArrayList不是同步的,这意味着多个线程可以同时访问它。在多线程设置中,一个线程可以添加元素,而另一个线程可能删除它们。Vector是同步的,所以一次只有一个线程可以访问它。如果一个线程正在处理它,其他线程必须等待轮到它们。它更安全,但在多线程环境中速度也更慢。
增长ArrayList是动态增长的。当空间不足时,它会将其大小增加到当前容量的50%。Vector也会自动调整大小,但它会通过将其大小加倍来增长,这可能导致使用比必要更多的内存。
性能ArrayList在大多数操作(如添加、搜索或删除元素)方面性能更快。由于它没有内置同步,因此没有锁定的延迟,这意味着更好的速度。Vector相比之下速度较慢。因为它在操作期间锁定整个结构,其他线程必须等待。线程安全性是以性能为代价的。
遗留状态ArrayList是现代的,于Java 1.2引入,是Collections Framework的一部分。它在新Java程序中常用。Vector是一个较老的类,自Java 1.0起就存在。它被认为是一个遗留类,在现代应用程序中很少使用。
元素遍历ArrayList使用迭代器来循环遍历元素,这是大多数现代Java集合的工作方式。Vector支持迭代器和Enumeration,Enumeration是Java中遍历元素的旧方法。

ArrayList vs Vector

ArrayList 示例

让我们看一个使用ArrayList存储和遍历元素的简单示例。

示例

编译并运行

输出

Sonoo
Michael
James
Andy

Vector 示例

让我们看一个使用Enumeration接口的Java Vector类的简单示例。

示例

编译并运行

输出

Andrew
Peter
Jack

ArrayList和Vector选择题

1. 关于ArrayList,以下哪项是正确的?

  1. 它默认是同步的
  2. 它是一个遗留类
  3. 它的大小会加倍增长
  4. 它默认不是同步的
 

答案: D

解释: Vector默认是同步的,而ArrayList不是。


2. 在多线程环境中,什么使得Vector成为更安全的选择?

  1. 它使用更多内存
  2. 它自动同步
  3. 它比ArrayList快
  4. 它不允许重复元素
 

答案: B

解释: Vector是同步的,所以一次只有一个线程可以访问它。


3. 如果你想要更好的性能,而线程安全不是问题,应该选择哪个?

  1. Vector
  2. ArrayList
  3. 两者
  4. 都不是
 

答案: B

解释: ArrayList不是同步的。但是,它的性能比Vector好。


4. 当Vector需要更多空间时,它是如何增长的?

  1. 它增加25%
  2. 它增加一半
  3. 它的大小翻倍
  4. 它每次创建一个新数组
 

答案:C

解释: Vector会自动调整大小,但它会通过将其大小加倍来增长。


5. 哪个支持Iterator和Enumeration进行遍历?

  1. ArrayList
  2. Vector
  3. 两者
 

答案: B

解释: Vector支持Iterator和Enumeration,Enumeration是Java中遍历元素的旧方法。


下一主题Java Vector