3

Vector 和 ArrayDeque 类之间有什么区别?我昨天读到了 ArrayDeque 类,而我之前使用过 Vector 类。

4

3 回答 3

9

基本情况是:

Vectorimplements java.util.List,它定义了允许基于索引访问元素的容器。它还实现interface RandomAccess了 ,它向用户表明底层表示允许快速(通常O(1))访问元素。

ArrayDequeimplements java.util.Deque,它定义了一个容器,该容器支持从容器的开头和结尾快速添加和删除元素。

主要区别:

  • VectorList.add(int index, E element)支持使用or的重载版本将元素添加到容器的中间List.addAll(int index, Collection<? extends E> c)

  • Vector支持从容器中间移除元素,使用remove方法。

  • VectorsetsetElementAt方法允许您进行就地元素交换(将一个对象替换为另一个对象Vector,一个O(1)操作)。

  • adding 到 a 的末尾Vector是摊销的常数时间。添加到向量的开头或中间的是线性时间操作 ( O(n))。

  • ArrayDeque具有摊销常数时间 ( O(1)) 在容器前后添加/删除元素。

  • ArrayDeque不允许您专门删除容器中某个位置的元素。类的各种removeremoveFirstremoveLast方法允许您稍微有限地删除元素。

  • ArrayDeque带有使用类的方法,例如队列(peek, poll, add, addFirst)和堆栈(offer, push, pop, peekLast, addLast),或者两者都喜欢(因此它是双端队列)。

  • ArrayDeque不支持将元素添加到双端队列的中间。

  • Vector具有特殊ListIterator的 s ,它允许您获取从容器中特定位置开始的迭代器,并且还支持添加、删除和设置元素。ArrayDeque的迭代器不支持那些额外的方法。

  • Vector是一个同步容器,这意味着它已经包含为多线程环境执行同步/锁定的代码。对于ArrayDeque,如果您对容器进行多线程访问,则必须提供自己的同步代码。请注意,ArrayList它与Vector.

于 2012-05-08T18:30:14.410 回答
4

几个区别:

  • Vector 实现List接口,而 ArrayDeque 实现Queue接口。这些是不同的接口,提供不同的操作集:Vector 是您的香草容器,而*Queue更面向多线程应用程序(生产者/消费者模式),因为它具有诸如poll等的方法offer
  • Vector 线程安全(它具有内置同步),ArrayDeque 不是线程安全的;
  • 从 1.0 版开始包含在 JDK 中的向量,从 1.6 版开始包含在 ArrayDeque 中。
于 2012-05-08T18:26:14.573 回答
0

根据 Oracle 文档 Vector 和 Stack 是遗留类,您应该使用 Arraylist 和 ArrayDeque 代替。 https://docs.oracle.com/javase/tutorial/collections/implementations/index.html https://docs.oracle.com/javase/7/docs/api/java/util/ArrayList.html说“(这个类大致相当于 Vector,只是它是不同步的。)"

于 2021-11-12T14:49:11.570 回答