这两个数据结构ArrayList和向量之间有什么区别,你应该在哪里使用它们?
差异
如果对vector没有特殊要求,请使用数组列表。
同步
如果多个线程同时访问一个数组列表,那么我们必须从外部同步修改列表结构或简单修改元素的代码块。结构修改是指从列表中添加或删除元素。设置现有元素的值不是结构修改。
Collections.synchronizedList通常在创建列表时使用,以避免对列表的任何意外不同步访问。
Collections.synchronizedList
数据增长
在内部,ArrayList和Vector都使用Array保存它们的内容。当一个元素被插入到一个数组列表或Vector对象中时,如果它的空间不足,对象将需要扩展它的内部数组。Vector默认将其数组大小增加一倍,而ArrayList则将其数组大小增加50%。
ArrayList更新,速度快20-30%。
ArrayList
如果你不需要Vector中显式的东西,使用ArrayList
Vector
正如文档所述,Vector和ArrayList0几乎是等价的。区别在于,对Vector的访问是同步的,而对ArrayList的访问不是同步的。这意味着一次只有一个线程可以调用Vector上的方法,并且在获取锁时有轻微的开销;如果你使用ArrayList,情况就不同了。一般来说,你会想要使用ArrayList;在单线程的情况下,这是一个更好的选择,在多线程的情况下,您可以更好地控制锁定。想要允许并发读取?很好。想要对一批10个写入执行一次同步吗?还好。这确实需要你多加小心,但这很可能是你想要的。还要注意的是,如果你有一个数组列表,你可以使用ArrayList1函数来创建一个同步列表,从而得到一个等价的Vector。
Vector是一个破碎的类,它是不线程安全的,尽管它是“同步的”,并且被学生和其他没有经验的程序员使用。
ArrayList是专业人员和有经验的程序员使用的List实现。
想要线程安全的List实现的专业人员使用CopyOnWriteArrayList。
CopyOnWriteArrayList
基本上ArrayList和Vector都使用内部对象数组。
向量: Vector类似于ArrayList,但不同之处在于,它是同步的,它的默认初始大小是10,当大小超过它时,它的大小会增加到原始大小的两倍,这意味着新的大小将是20。Vector是除ArrayList之外唯一实现RandomAccess的类。Vector有四个构造函数,其中一个接受两个参数Vector(int initialCapacity, int capacityIncrement) capacityIncrement是当Vector溢出时容量增加的量,因此它对负载因子有更多的控制。
在向量和数组列表之间有两个主要的区别。
Vector默认同步,ArrayList不同步。 注意:通过将ArrayList对象传递给Collections.synchronizedList()方法,可以使ArrayList也同步化。 Synchronized的意思是:它可以与多个线程一起使用,没有任何副作用
当空间不足以容纳新元素时,数组列表的大小将增长到先前大小的50%,而当没有空间容纳新传入元素时,as Vector将增长到先前大小的100%。
除此之外,就编程工作而言,它们之间还有一些实际的区别:
什么时候用哪个?
请注意:即使数组列表增长了100%,你可以通过ensurecapacity()方法来避免这种情况,以确保你在初始阶段本身分配了足够的内存。
希望能有所帮助。
ArrayList和Vector都实现了List接口并维护插入顺序。但是在ArrayList和Vector类之间有很多不同…
ArrayList -
Vector -
Vector是一个遗留类。
Vector很慢,因为它是同步的,即在多线程环境中,它将保持其他线程处于可运行或不可运行状态,直到当前线程释放对象的锁。
Vector使用枚举接口遍历元素。但它也可以使用Iterator。
参见:https://www.javatpoint.com/difference-between-arraylist-and-vector