Vector 和 ArrayDeque 类之间有什么区别?我昨天读到了 ArrayDeque 类,而我之前使用过 Vector 类。
3 回答
基本情况是:
Vector
implements java.util.List
,它定义了允许基于索引访问元素的容器。它还实现interface RandomAccess
了 ,它向用户表明底层表示允许快速(通常O(1)
)访问元素。
ArrayDeque
implements java.util.Deque
,它定义了一个容器,该容器支持从容器的开头和结尾快速添加和删除元素。
主要区别:
Vector
List.add(int index, E element)
支持使用or的重载版本将元素添加到容器的中间List.addAll(int index, Collection<? extends E> c)
。Vector
支持从容器中间移除元素,使用remove
方法。Vector
的set
和setElementAt
方法允许您进行就地元素交换(将一个对象替换为另一个对象Vector
,一个O(1)
操作)。add
ing 到 a 的末尾Vector
是摊销的常数时间。添加到向量的开头或中间的是线性时间操作 (O(n)
)。ArrayDeque
具有摊销常数时间 (O(1)
) 在容器前后添加/删除元素。ArrayDeque
不允许您专门删除容器中某个位置的元素。类的各种remove
、removeFirst
和removeLast
方法允许您稍微有限地删除元素。ArrayDeque
带有使用类的方法,例如队列(peek
,poll
,add
,addFirst
)和堆栈(offer
,push
,pop
,peekLast
,addLast
),或者两者都喜欢(因此它是双端队列)。ArrayDeque
不支持将元素添加到双端队列的中间。Vector
具有特殊ListIterator
的 s ,它允许您获取从容器中特定位置开始的迭代器,并且还支持添加、删除和设置元素。ArrayDeque
的迭代器不支持那些额外的方法。Vector
是一个同步容器,这意味着它已经包含为多线程环境执行同步/锁定的代码。对于ArrayDeque
,如果您对容器进行多线程访问,则必须提供自己的同步代码。请注意,ArrayList
它与Vector
.
几个区别:
- Vector 实现
List
接口,而 ArrayDeque 实现Queue
接口。这些是不同的接口,提供不同的操作集:Vector 是您的香草容器,而*Queue
更面向多线程应用程序(生产者/消费者模式),因为它具有诸如poll
等的方法offer
; - Vector 线程安全(它具有内置同步),ArrayDeque 不是线程安全的;
- 从 1.0 版开始包含在 JDK 中的向量,从 1.6 版开始包含在 ArrayDeque 中。
根据 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,只是它是不同步的。)"