3 回答
TA贡献1796条经验 获得超7个赞
如文档所述,a Vector和an ArrayList几乎相等。不同之处在于对a的访问Vector是同步的,而对a的访问ArrayList则不同步。这意味着一次只能有一个线程可以在一个线程上调用方法Vector,并且获取锁的开销很小。如果使用ArrayList,则不是这种情况。通常,您将需要使用ArrayList;; 在单线程情况下,这是一个更好的选择;在多线程情况下,您可以更好地控制锁定。要允许并发读取吗?精细。是否想对十次写入执行一次同步?还可以 它确实需要在您的末端多一点照顾,但可能正是您想要的。另请注意,如果您有ArrayList,则可以使用Collections.synchronizedList函数来创建同步列表,从而使您等效于Vector。
TA贡献1850条经验 获得超11个赞
Vector和ArrayList之间有2个主要区别。
向量默认情况下是同步的,而ArrayList不同步。注意:通过将arraylist对象传递给Collections.synchronizedList()方法,可以使ArrayList也同步。同步方式:可以与多个线程一起使用,而没有任何副作用。
当空间不足以容纳新元素时,ArrayLists将以先前大小的50%增长,而当没有空间容纳新传入元素时,Vector将以先前大小的100%增长。
除此之外,就编程工作而言,它们之间还存在一些实际差异:
为了从Vector获得特定位置的元素,我们使用elementAt(int index)函数。此函数名称很长。代替ArrayList,我们有了get(int index),它很容易记住和使用。
类似地,要使用Vector中的新元素替换现有元素,我们使用setElementAt()方法,该方法又很长,可能会刺激程序员重复使用。代替此ArrayList具有添加(INT指数,对象)方法,该方法很容易使用和记忆。像这样,它们在ArrayList中对程序员更友好且易于使用。
什么时候使用哪个?
尝试避免完全使用Vector。ArrayList可以完成Vector可以完成的所有工作。更多信息ArrayList默认情况下不同步。如果需要,可以使用Collections util类在需要时进行同步。
ArrayList具有易于记忆和使用的函数名称。
注意:即使arraylist增长了100%,您也可以通过surecapacity()方法来避免这种情况,以确保您在初始阶段本身就分配了足够的内存。
希望能帮助到你。
添加回答
举报