一开始,我会承认我是白痴;但有一件事我似乎无法理解。除了这个之外,ArrayList
和Vector
之间似乎找不到太多区别:
“... (这个类大致相当于Vector,除了它是不同步的。) ......”
在ArrayList的javaDocs中。
因此,当我们考虑一般情况(即排除真的是我们应用这些两个相似类的重要因素>基于线程的编程)?还有其他标记的差异吗?如果是的话,请告诉我。如果没有,那么哪一个是最受欢迎的或普遍接受的方法?
答案 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(...));