Vector 和 ArrayDeque 类之间有什么区别?我昨天读到了 ArrayDeque 类,而我之前使用过 Vector 类。
3 回答
基本情况是:
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方法。Vector的set和setElementAt方法允许您进行就地元素交换(将一个对象替换为另一个对象Vector,一个O(1)操作)。adding 到 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,只是它是不同步的。)"