ArrayList和Vector有什么区别?
两个数据结构ArrayList和Vector之间有什么区别,你应该在哪里使用它们?
差异
如果没有特殊要求使用Vector,则使用ArrayList。
同步
如果多个线程同时访问一个ArrayList,那么我们必须在外部同步代码块,从而在结构上修改列表或者简单地修改一个元素。 结构修改意味着从列表中添加或删除元素。 设置现有元素的值不是结构修改。
通常在创建列表时使用Collections.synchronizedList
,以避免对列表的意外非同步访问。
参考
数据增长
在内部,ArrayList和Vector都使用数组保存其内容。 当一个元素被插入到一个ArrayList或一个Vector中时,如果对象在空间不足时需要扩展它的内部数组。 Vector默认将其数组大小加倍,而ArrayList将数组大小增加50%。
参考
正如文档所述, Vector
和ArrayList
几乎是等价的。 不同之处在于对Vector
访问是同步的,而对ArrayList
访问则不是。 这意味着一次只有一个线程可以调用Vector
上的方法,并且在获取锁的时候会有一些额外的开销; 如果你使用ArrayList
,情况并非如此。 一般来说,你会想使用一个ArrayList
; 在单线程的情况下,这是更好的选择,而在多线程的情况下,您可以更好地控制锁定。 想要允许并发读取? 精细。 想要为一批10个写入执行一次同步? 还好。 它确实需要更多的关心,但它可能是你想要的。 还要注意,如果你有一个ArrayList,你可以使用Collections.synchronizedList
函数来创建一个同步列表,从而使你得到一个Vector
的等价物。
Vector
是一个破碎的类,它不是线程安全的,尽管它是“同步”的,只能由学生和其他没有经验的程序员使用。
ArrayList
是由专业人员和经验丰富的程序员使用的前往列表实现。
想要线程安全的List实现的专业人员使用CopyOnWriteArrayList
。