Java 中的 Vector 与 ArrayList

ArrayList 和 Vector 是软件包中最常用的两个类 collection 的 java 和 Vector 和 ArrayList 之间的区别是一个非常常见的问题。虽然这是一个简单的问题,但重要的是要知道何时使用 Vector 或 ArrayList,尤其是在处理大型项目时。

在本文中,我们将了解 Java 中 Vector 和 ArrayList 之间的差异点,并尝试理解这些差异背后的概念。

在我们讨论 Vector 和 Vector 之间的区别之前和 ArrayList,让我们看看这两者之间的相似之处:
  1. Vector 和 ArrayList 使用可扩展的存储结构。
  2. ArrayList 和 Vector 使用内部数组结构。
  3. 这两个列表都保持元素的插入顺序。这意味着,如果浏览 ArrayList 或 Vector,则可以按照对象插入的顺序检索对象。
  4. Vector 和 ArrayList 允许重复元素,并且 null 值。
  5. Iterator 和 listIterator 由 Vector 和 ArrayList 返回的类型为 fail-fast。

Vector 与 ArrayList

1) Synchronization
ArrayList 不同步,这意味着多个线程可以同时访问它。例如,如果一个线程正在 ArrayList 中执行追加操作,则另一个线程可能正在不同步的多线程环境中执行并行删除操作。

Vector 已同步。这可确保在并发和多线程环境中安全地使用线程。例如,如果线程正在 Vector 中执行操作,则在第一个线程完成之前,其他线程无法访问它。与 ArrayList 不同,一次只能有一个线程执行操作。

2) Performance
ArrayList 性能更高、速度更快,因为它是非同步的,因此在单线程环境中是一个非常好的选择。如果线程只读取 ArrayList.

由于 Vector 是同步的,因此它为同步付出了代价,这使得它变慢且性能不佳。执行操作的线程会阻止对其他线程的访问,因此,它们会等到解锁锁。

3) 调整大小
两个列表的存储容量是可扩展的或可收缩的, Java 设计人员已将其动态化,以保持最佳存储使用率。但是,每个都有自己的方法。ArrayList 的大小增加了一半,而 Vector 的默认大小增加了一倍。可以通过调用方法 ensureCapacity().

4) fail-fast
首先,让我们了解什么是fail-fast:如果集合(ArrayList、Vector 等)被修改,除了迭代器添加和删除操作之外,在创建迭代器后,迭代器将引发异常ConcurrentModificationException。更改结构与在集合中添加或删除项有关。

Vector 通过调用 elements()那不是失败。另一方面,ArrayList 返回的 Iterator 和 ListIterator 是 fail-fast.

5) 谁真正属于集合框架?
Vector 是 JDK 1.0 附带的类之一,最初不是集合框架的一部分,但在最新版本中,它已被考虑在内,因为它实现了 List 接口,因此, 它成为 collection.

ArrayList 框架是在 Vector 发布 JDK 1.2 之后引入的。ArrayList 比 Vector 更先进,但它也具有 Vector 的所有规格。因此,人们开始使用 ArrayList 而不是 Vector,在这种情况下,Vector 成为了一个遗留类。

何时使用 Vector 和 ArrayList?

这取决于您的需求,如果您的代码执行进程(线程)的同步,Vector 将是最佳选择,因为它确保一次只有一个线程访问集合。

与非同步操作相比,同步操作会消耗大量时间,因此,如果您的应用程序需要运行得更快并且不需要同步,那么 ArrayList 将是正确的选择,从性能上讲。

此表总结了我们看到的 5 个差异:

ArrayList Vector
1) ArrayList 未同步。 Vector is synchronized
2) 如果元素数超过其容量,ArrayList 将增加其当前大小的 50% Vector invrementes 100%,这意味着如果元素数超过其容量,则其原始大小将增加一倍
3) JDK 1.2. Vector 是在 JDK 1.0 中引入的
4) ArrayList 速度很快,因为它不是同步的 Vector 很慢,因为它是同步的。在竞争环境中,它将阻止其他进程访问,直到第一个线程允许访问
5) ArrayList 使用 Iterator 遍历 elements Vector 使用 Enumeration 接口遍历元素,但是, 它也可以使用迭代器
Advertisement

AdBlock Detected

Please disable your ad blocker and refresh the window to use this website.