向量(Vector
)实现的数组在添加或删除某些元素时会在运行时增大/缩小。使用整数索引访问其元素,容量和容量增量这两个字段代表向量(Vector
)存储管理的特征。它实现了四个接口:
- List
- RandomAccess
- Cloneable
- Serializable
就像向量(Vector
)一样,ArrayList
也实现了四个接口。其大小可以在运行时更改。此外,它还有一个称为容量的字段,其大小与ArrayList
的大小一样大。
Vector
和ArrayList
都可以从任何位置检索元素,也可以从容器类的末尾插入或删除元素。从API角度来看,向量(Vector
)和ArrayList
都非常相似。那么两者的区别到底在哪里呢?以下几点将阐明此问题:
同步: 向量(
Vector
)已同步,但ArrayList未同步。如果从ArrayList中添加或删除元素,则称为结构修改。当多个线程同时访问一个ArrayList并修改该列表的代码块时,则需要从外部同步该列表。简而言之,向量(Vector
)内容是线程安全的,而ArrayList则不是。如果要求未提及线程安全集合,则应选择ArrayList,因为同步会影响性能。非同步的ArrayList很快。数据增长:ArrayList和vector元素都存储为数组,但是vector的默认大小为10,而ArrayList没有默认的大小。 当将一个元素添加到ArrayList或vector时,这两个类都有可能耗尽空间。 在这种情况下,默认情况下,Vector的大小会加倍,而ArrayList的大小会增加50%。 对于向量可以设置一个增量值,这对于ArrayList是不可能的。
遍历元素:ArrayList在这里有一个优势,因为可以通过简单地使用索引来访问其元素。 对于向量,需要创建一个迭代器以遍历其元素。
ArrayList 和 Vector 都实现了 List 接口并维护了插入顺序。但是,下面给出的 ArrayList 和 Vector 类之间存在差异(区别)。
ArrayList | Vector |
---|---|
ArrayList 不同步。 | 矢量是同步的。 |
如果元素数量超出其容量,ArrayList 将增加当前数组大小的 50%。 | 如果元素总数超过其容量,则将数组容量加倍。 |
ArrayList 不是遗留类。 | 它是在 JDK 1.2 中引入的。 Vector 是一个遗留类。 |
ArrayList 很快,因为它是非同步的。 | Vector 很慢,因为它是同步的,即在多线程环境中,它将其他线程保持在可运行或不可运行状态,直到当前线程释放对象的锁。 |
ArrayList 使用 Iterator 接口遍历元素。 | Vector 可以使用 Iterator 接口或 Enumeration 接口来遍历元素。 |
Java ArrayList 示例
让我们看一个使用 ArrayList 来存储和遍历元素的简单的例子。
import java.util.*;
class TestVector1{
public static void main(String args[]){
Vector<String> v=new Vector<String>();//creating vector
v.add("vsdiffer");//method of Collection
v.addElement("vsdiffer#com");//method of Vector
v.addElement("kumar");
//traversing elements using Enumeration
Enumeration e=v.elements();
while(e.hasMoreElements()){
System.out.println(e.nextElement());
}
}
}
总结
- 如果要通过单个线程或某个局部变量修改容器类,则应使用ArrayList。
- 当容器类被多个线程访问时,最好使用向量,否则将必须进行手动同步。
- 可以使用vector和ArrayList来指定增量大小,而不能使用。
- 向量同步,而ArrayList不同步。
- 向量可以使大小增加一倍; ArrayList可以将其增加50%。
欢迎任何形式的转载,但请务必注明出处,尊重他人劳动成果。
转载请注明:文章转载自 有区别网 [http://www.vsdiffer.com]
本文标题:ArrayList和Vector
本文链接:https://www.vsdiffer.com/vs/arraylist-vs-vector.html
免责声明:以上内容仅是站长个人看法、理解、学习笔记、总结和研究收藏。不保证其正确性,因使用而带来的风险与本站无关!如本网站内容冒犯了您的权益,请联系站长,邮箱: ,我们核实并会尽快处理。