Java ArrayList vs Vector:使用哪一种?

Java ArrayList vs Vector:使用哪一种?,java,vector,arraylist,difference,Java,Vector,Arraylist,Difference,一开始,我承认我是个白痴;但有一件事我似乎不明白。我似乎找不到ArrayList和Vector之间有什么区别,除了以下几点: “…(该类大致相当于Vector,只是它不同步)。” 在的javaDocs中 P>那么,当我们考虑一般场景(即排除基于线程的编程中的应用)时,这种差异真的是我们应用这些两个相似类的一个重要因素吗?还有其他显著的区别吗?如果是,请告诉我。如果不是,那么哪一种方法是最首选或普遍接受的方法?除了同步的差异外,插入新元素时内部也存在差异。对于这两个类,必须增大其中的数组的大小,

一开始,我承认我是个白痴;但有一件事我似乎不明白。我似乎找不到
ArrayList
Vector
之间有什么区别,除了以下几点:

“…(该类大致相当于Vector,只是它不同步)。”

在的javaDocs中


<> P>那么,当我们考虑一般场景(即排除基于线程的编程中的应用)时,这种差异真的是我们应用这些<强>两个相似类的一个重要因素吗?还有其他显著的区别吗?如果是,请告诉我。如果不是,那么哪一种方法是最首选或普遍接受的方法?

除了同步的差异外,插入新元素时内部也存在差异。对于这两个类,必须增大其中的数组的大小,以防止其空间不足。默认情况下,向量是其大小的两倍。阵列列表将其大小增加到当前大小的一半

编辑:

另外,有几个答案提到向量是线程安全的。这在某种程度上是正确的,但它们被弃用的全部原因(我认为)是因为它们对于大多数同步需求不是很有用,这是因为它在每个操作上都是同步的(不安全的)。您通常要做的是同步一系列操作。向量不能做到这一点(ArrayList也不能做到),因此即使在需要同步的情况下(基本上,这超出了您的控制范围),这也不是真正可行的方法。

根据:

“建议使用ArrayList代替Vector”

您仍然可以通过以下方式获得列表的同步版本:


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

两者之间的主要区别在于向量是同步的,因此它们是线程安全的,而ArrayList不是。它们都使用一个数组来存储它们包含的数据,因此每当您向其内容添加内容时,它们都需要调整自身大小,尽管它们可以非常有效地调整大小,但这是需要考虑的

ArrayList还具有作为集合框架一部分的优势,因此您可以使用集合方法对其进行排序、搜索等


希望这有帮助

唯一的区别是同步,如果在线程程序中使用列表,则应使用vector,如果不是,则应使用ArrayList(或列表的其他未同步实现)


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

Vector自java 1.0以来就一直存在

ArrayList是与Java1.2一起发布的

首选的方法是使用ArrayList

如果您关心线程安全,可以如下方式进行同步:


List List=Collections.synchronizedList(新的ArrayList(…)

谢谢!所以,我猜
ArrayList
s的增长速度比
Vectors
慢;后者是半弃用的。所以
ArrayList
赢了!还有其他的区别吗?谢谢你的回答,但是我需要关于一般情况的帮助。线程不是必需的。这里有一篇关于差异的广泛文章。文章说“如果不需要线程安全的实现,建议使用ArrayList代替Vector。”不是每次都建议使用ArrayList,这就是为什么您会得到一个线程安全的版本,其中包含Collections.synchronizedList.Hope文章会给您一个更好的主意。使用ArrayList.Vector有点不推荐使用。它比较慢,比较旧,所以只适合列表范例,而且它提供的同步通常不足以在多线程环境中发挥作用。@HotLicks。所以,我猜
Vector
速度较慢,因为它会占用更多内存?同步不是免费的。不知道其他任何事情——从未仔细研究过代码。
Collections.synchronizedList(List<T> list)
List list = Collections.synchronizedList(new ArrayList());