Vector和ArrayDeque类有什么区别?我昨天读到了关于ArrayDeque的类,而我之前使用过Vector类。
答案 0 :(得分:9)
基础知识是:
Vector
实现java.util.List
,它定义了允许对元素进行基于索引的访问的容器。它还实现了interface RandomAccess
,它向用户指示底层表示允许快速(通常O(1)
)访问元素。
ArrayDeque
实现java.util.Deque
,它定义了一个容器,支持从容器的开头和结尾添加和删除快速元素。
主要差异:
Vector
支持使用List.add(int index, E element)
或List.addAll(int index, Collection<? extends E> c)
的重载版本将元素添加到容器的中间。
Vector
支持使用remove
方法从容器中间删除元素。
Vector
的{{1}}和set
方法允许您进行就地元素交换(将setElementAt
中的一个对象替换为另一个, Vector
操作。
O(1)
到add
的末尾是摊还的常数时间。添加到向量的开头或中间是线性时间操作(Vector
)。
O(n)
已经在容器的正面和背面分别添加/删除了元素的常量时间(ArrayDeque
)。
O(1)
不允许您专门删除容器中某个位置的元素。该类的各种ArrayDeque
,remove
和removeFirst
方法允许您更有限地删除元素。
removeLast
附带了使用类的方法,如队列(ArrayDeque
,peek
,poll
,add
)和堆栈一样(addFirst
,offer
,push
,pop
,peekLast
),或两者兼有(因此它为Double-Ended Queue)。
addLast
不支持在双端队列中间添加元素。
ArrayDeque
具有特殊的Vector
,它允许您获取从容器中特定位置开始的迭代器,并且还支持添加,删除和设置元素。 ListIterator
的迭代器不支持这些额外的方法。
ArrayDeque
是一个同步容器,这意味着它已包含为多线程环境执行同步/锁定的代码。对于Vector
,如果您正在对容器进行多线程访问,则必须提供自己的同步代码。请注意,ArrayDeque
与ArrayList
的未同步对应。
答案 1 :(得分:4)
几乎没有差异:
List
接口,而ArrayDeque实现Queue
接口。这些是不同的接口,提供不同的操作集合:Vector是您的vanilla容器,而*Queue
更倾向于多线程应用程序(生产者/消费者模式),因为它具有poll
等方法, offer
等;