这两个数据结构ArrayList和Vector之间有什么区别,应在哪里使用它们?
Vector v = new Vector(3, 2);
这两个数据结构ArrayList和Vector之间有什么区别,应在哪里使用它们?
Vector v = new Vector(3, 2);
Answers:
差异性
如果没有使用Vector的特定要求,请使用ArrayLists。
同步化
如果多个线程同时访问ArrayList,则我们必须在外部同步代码块,该代码块在结构上或仅在修改元素时会修改列表。结构修饰是指从列表中添加或删除元素。设置现有元素的值不是结构上的修改。
Collections.synchronizedList
通常在创建列表时使用,以避免对列表进行任何意外的非同步访问。
数据增长
在内部,ArrayList和Vector都使用Array保留其内容。将元素插入ArrayList或Vector时,如果对象空间不足,则需要扩展其内部数组。Vector默认将其数组大小增加一倍,而ArrayList将其数组大小增加50%。
如文档所述,a Vector
和an ArrayList
几乎相等。不同之处在于对a的访问Vector
是同步的,而对a的访问ArrayList
则不同步。这意味着一次只能有一个线程可以在一个线程上调用方法Vector
,并且获取锁的开销很小。如果使用ArrayList
,则不是这种情况。通常,您将需要使用ArrayList
;; 在单线程情况下,这是一个更好的选择;在多线程情况下,您可以更好地控制锁定。要允许并发读取吗?精细。是否想对十次写入执行一次同步?还可以 它确实需要在您的末端多一点照顾,但可能正是您想要的。另请注意,如果您有ArrayList,则可以使用Collections.synchronizedList
函数来创建同步列表,从而使您等效于Vector
。
Vector
尽管它是“同步的”,但它还是一个不是线程安全的中断类,仅由学生和其他经验不足的程序员使用。
ArrayList
是专业人士和经验丰富的程序员使用的首选列表实现。
希望使用线程安全List实现的专业人员使用CopyOnWriteArrayList
。
Vector
是意是线程安全的,但有一个设计缺陷,它使*不事实上线程安全的,它基本上是一个过时的类。由于某些原因,大学等尚未听说此消息,仍主张使用它。
ArrayList
较新,速度提高20-30%。
如果您不需要中明显的内容Vector
,请使用ArrayList
20-30% faster
吗?
Vector和ArrayList之间有2个主要区别。
向量默认情况下是同步的,而ArrayList不同步。注意:通过将arraylist对象传递给Collections.synchronizedList()方法,可以使ArrayList也同步。同步方式:可以与多个线程一起使用,而没有任何副作用。
当空间不足以容纳新元素时,ArrayLists将以先前大小的50%增长,而当没有空间容纳新传入元素时,Vector将以先前大小的100%增长。
除此之外,就编程工作而言,它们之间还存在一些实际差异:
什么时候使用哪个?
注意:即使arraylist增长了100%,您也可以通过surecapacity()方法来避免这种情况,以确保您在初始阶段本身就分配了足够的内存。
希望能帮助到你。
ArrayList
而Vector
这两种工具列表界面,并保持插入order.But有很多区别ArrayList
和Vector
类...
ArrayList
不同步。ArrayList
如果元素数量超出其容量,则增加当前数组大小的50%。ArrayList
不是遗留类,它是JDK 1.2中引入的。ArrayList
速度很快,因为它是不同步的。ArrayList
使用Iterator接口遍历元素。向量 -
Vector
已同步。Vector
递增100%表示如果元素总数超过其容量,则数组大小增加一倍。Vector
是一个遗留类。
Vector
之所以缓慢是因为它是同步的,即在多线程环境中,它将使其他线程处于可运行或不可运行状态,直到当前线程释放对象锁为止。
Vector
使用Enumeration接口遍历元素。但是它也可以使用Iterator。
另请参见:https : //www.javatpoint.com/difference-between-arraylist-and-vector
基本上,ArrayList和Vector都使用内部对象数组。
ArrayList: ArrayList类扩展AbstractList并实现List接口和RandomAccess(标记接口)。ArrayList支持可以根据需要增长的动态数组。它为我们提供了元素的第一次迭代。ArrayList使用内部对象数组;它们以默认的初始大小10创建。超过该大小时,集合会自动增加到默认大小15的一半。
Vector: Vector与ArrayList相似,但不同之处在于,它是同步的,其默认初始大小为10,并且当大小超过其大小时增加到原始大小的两倍,这意味着新大小将为20。Vector是唯一的类除了ArrayList以外,还可以实现RandomAccess。Vector具有四个构造函数,其中一个带有两个参数Vector(int initialCapacity,int CapacityIncrement)CapacityIncrement是向量溢出时容量增加的数量,因此它可以更好地控制负载系数。
其他一些区别是: