Vector和ArrayDeque类

Kam*_*tho 3 java arrays class vector

Vector和ArrayDeque类之间的区别是什么?我昨天读到了关于ArrayDeque的类,而我之前使用过Vector类.

wkl*_*wkl 9

基础是:

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

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

主要差异:

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

  • Vector支持使用该remove方法从容器中间删除元素.

  • VectorsetsetElementAt方法,让你做一个就地元素交换(替换一个物体Vector与另外一个,一个O(1)操作).

  • add到a的结尾Vector是摊销的恒定时间.添加到向量的开头或中间是线性时间操作(O(n)).

  • ArrayDeque已经分摊了常量时间(O(1))在容器的正面和背面添加/删除元素.

  • ArrayDeque不允许您专门删除容器中某个位置的元素.各种remove,removeFirst以及removeLast类的方法让你稍微有限元素移除.

  • ArrayDeque附带的方法对使用类似一个队列(peek,poll,add,addFirst)和类似的堆叠(offer,push,pop,peekLast,addLast),或类似的两个(因此为什么它是一个双向队列).

  • ArrayDeque 不支持在双端队列中间添加元素.

  • Vector有特殊的ListIterators,它允许你获得一个从容器中的特定位置开始的迭代器,并且还支持添加,删除和设置元素.ArrayDeque迭代器不支持那些额外的方法.

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