ArrayList vs Vector:使用哪一个?

时间:2014-02-27 13:25:06

标签: java vector arraylist difference

一开始,我会承认我是白痴;但有一件事我似乎无法理解。除了这个之外,ArrayListVector之间似乎找不到太多区别:

  

“... (这个类大致相当于Vector,除了它是不同步的。) ......”

ArrayList的javaDocs中。

因此,当我们考虑一般情况(即排除真的是我们应用这些两个相似类的重要因素>基于线程的编程)?还有其他标记的差异吗?如果是的话,请告诉我。如果没有,那么哪一个是最受欢迎的普遍接受的方法?

5 个答案:

答案 0 :(得分:4)

除了同步的差异之外,插入新元素时内部也存在差异。对于这两个类,必须增加其中的数组以防止其耗尽空间。默认情况下,矢量的大小加倍。 ArrayLists将它们的大小增加到现有大小的一半。

编辑:

此外,一些答案提到Vector是线程安全的。这在某种程度上是正确的,但是他们被弃用(我认为)的全部原因是因为它们对大多数同步需求不是很有用,这是因为它在每个操作上都是同步的(不安全)。您通常要做的是同步一系列操作。向量不会这样做(尽管ArrayLists也不这样做)所以即使在需要同步的情况下它也不是真正的方法(基本上它不受你的控制)。

答案 1 :(得分:4)

根据Java API

  

“建议使用ArrayList代替Vector”

仍然可以使用Collections获得列表的同步版本:

Collections.synchronizedList(List<T> list)

例如

List list = Collections.synchronizedList(new ArrayList());

这将返回由指定列表支持的同步(线程安全)列表。

答案 2 :(得分:4)

两者之间的主要区别在于向量是同步的,因此它们是线程安全的,而ArrayLists则不是。它们都使用数组来存储它们包含的数据,因此每当你向它添加内容时,需要调整它们的大小,尽管它们非常有效,但需要考虑它。 / p>

ArrayLists还具有成为 Collection 框架一部分的优势,因此您可以使用Collection方法对其进行排序,搜索等。

希望这有帮助!

答案 3 :(得分:0)

唯一的区别是同步,如果你在线程程序中使用List你应该使用vector,但如果没有,则使用ArrayList(或其他未同步的List实现)。

理论上的原因是同步导致Vector的性能比ArrayList差。

答案 4 :(得分:0)

自java 1.0以来,Vector一直存在

ArrayList随java 1.2一起发布

首选方法是使用ArrayList。

如果您担心线程安全,可以像这样同步:

List list = Collections.synchronizedList(new ArrayList(...));