ArrayList和Vector之间有什么区别?

2022-08-31 04:40:02

这两种数据结构ArrayListVector之间有什么区别,应该在哪里使用它们?


答案 1

差异

  • 矢量是同步的,ArrayList不是。
  • 数据增长方法

如果没有使用 Vectors 的特定要求,请使用 ArrayLists。

同步

如果多个线程同时访问ArrayList,那么我们必须在外部同步代码块,该代码块在结构上修改列表或简单地修改元素。结构修改是指从列表中添加或删除元素。设置现有元素的值不是结构修改。

Collections.synchronizedList 通常在创建列表时使用,以避免对列表的任何意外非同步访问。

数据增长

在内部,ArrayList 和 Vector 都使用 Array 来保存它们的内容。将元素插入 ArrayList 或 Vector 时,如果空间不足,该对象将需要展开其内部数组。Vector 默认将其数组的大小加倍,而 ArrayList 将其数组大小增加 50%。


答案 2

正如文档所说,VectorArrayList几乎是等价的。不同之处在于,对 的访问是同步的,而对 的访问不是同步的。这意味着一次只有一个线程可以调用 a 上的方法,并且在获取锁时会有轻微的开销;如果使用 ,则情况并非如此。通常,您需要使用 ;在单线程情况下,这是一个更好的选择,而在多线程情况下,您可以更好地控制锁定。想要允许并发读取?好。想要对一批十次写入执行一次同步?也很好。它确实需要你多一点小心,但这可能是你想要的。另请注意,如果您有 ArrayList,则可以使用 Collections.synchronizedList 函数创建同步列表,从而获得等效于 .VectorArrayListVectorArrayListArrayListVector


推荐