ArrayList和Vector有什么区别?

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


差异

  • 向量是同步的,ArrayLists不是。
  • 数据增长方法
  • 如果没有特殊要求使用Vector,则使用ArrayList。

    同步

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

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

    参考

    数据增长

    在内部,ArrayList和Vector都使用数组保存其内容。 当一个元素被插入到一个ArrayList或一个Vector中时,如果对象在空间不足时需要扩展它的内部数组。 Vector默认将其数组大小加倍,而ArrayList将数组大小增加50%。

    参考


    正如文档所述, VectorArrayList几乎是等价的。 不同之处在于对Vector访问是同步的,而对ArrayList访问则不是。 这意味着一次只有一个线程可以调用Vector上的方法,并且在获取锁的时候会有一些额外的开销; 如果你使用ArrayList ,情况并非如此。 一般来说,你会想使用一个ArrayList ; 在单线程的情况下,这是更好的选择,而在多线程的情况下,您可以更好地控制锁定。 想要允许并发读取? 精细。 想要为一批10个写入执行一次同步? 还好。 它确实需要更多的关心,但它可能是你想要的。 还要注意,如果你有一个ArrayList,你可以使用Collections.synchronizedList函数来创建一个同步列表,从而使你得到一个Vector的等价物。


    Vector是一个破碎的类,它不是线程安全的,尽管它是“同步”的,只能由学生和其他没有经验的程序员使用。

    ArrayList是由专业人员和经验丰富的程序员使用的前往列表实现。

    想要线程安全的List实现的专业人员使用CopyOnWriteArrayList

    链接地址: http://www.djcxy.com/p/76087.html

    上一篇: What are the differences between ArrayList and Vector?

    下一篇: Vector vs. ArrayList which is better?