Java中ArrayList和Vector之间的区别

作者: Laura McKinney
创建日期: 1 四月 2021
更新日期: 1 可能 2024
Anonim
千锋Java教程:123 ArrayList与Vector源码分析及比较
视频: 千锋Java教程:123 ArrayList与Vector源码分析及比较

内容


ArrayList和Vector都是Collection Framework层次结构下的类。 ArrayList和Vector均用于创建对象的动态数组,其中对象的大小可以根据需要增加。区分ArrayList和Vector有两个基本区别,即Vector属于Legacy类,该类在后来经过重新设计以支持集合类,而ArrayList是标准集合类。另一方面,另一个重要的区别是ArrayList是不同步的。向量已同步。

让我们借助下面显示的比较表来研究其他差异。

  1. 比较表
  2. 定义
  3. 关键差异
  4. 相似点
  5. 结论

比较表

比较基础数组列表向量
基本的ArrayList类未同步。向量类已同步。
旧版ArrayList是一个标准的Collection类。Vector是一个遗留类,经过重新设计以支持集合类。
类声明ArrayList类类向量
重新分配如果未指定,则ArrayList的大小增加一半。如果未指定,向量将增加一倍。
性能由于ArrayList不同步,因此其运行速度比Vector还要快。由于Vector已同步,因此其运行速度比ArrayList慢。
枚举/迭代器ArrayList使用Iterator接口遍历存储在ArrayList中的对象。Vector使用Enumeration和Iterator接口遍历Vector中存储的对象。

ArrayList的定义

ArrayList属于标准集合类的列表。 ArrayList类是在 java.util 包,它扩展了 摘要清单 类,它也是一个标准的收集类,它也实现了 清单,是“集合接口”中定义的接口。在Java中,标准数组始终为固定长度。这意味着一旦创建;它不会动态增加或缩小大小。因此,您应该对所使用数组的长度有先验知识。但是,有时可能会在运行时显示所需的长度,因此,为了处理这种情况,Java引入了ArrayList。


ArrayList是用于动态创建包含对象引用的数组的类。该阵列的大小可以根据需要增加。类声明如下:

ArrayList类

在此,E指定数组将容纳的对象的类型。创建的数组具有可变的长度,当在列表中添加或删除对象时,数组的大小会增加和减小。

ArrayList不同步,这意味着一个以上的线程可以同时在阵列上操作。例如,如果一个线程正在向该数组添加对象引用,而另一个线程正在同一时间从同一数组中删除对象引用。使用ArrayList类创建动态数组:

数组列表 S1 =新的ArrayList(); System.out.ln(“ S1的初始大小:” + S1.size()); S1.add(“ T”); S1.add(“ C”); S1.add(“ H”); S1.add(1,“ E”); System.out.ln(“添加后S1包含:” + S1); System.out.ln(“添加后S1的大小:” + S1.size()); S1.remove(“ T”); S1。删除(2); System.out.ln(“删除后,S1包含:” + S1); System.out.ln(“删除后S1的大小:” + S1.size()); // S1的OutputInitial大小:0加法后S1包含:;添加后S1的大小:4删除后S1包含:删除后S1的大小:2

在上面的代码中,您可以看到;我创建了一个字符串类型的对象数组。我使用add()方法向数组S1中添加了一些对象,后来又使用remove()方法删除了一些对象。您可以观察到,如果不指定数组的初始大小,则其长度将为“ 0”。如您所见,随着添加和删除元素,数组的大小会增加和缩小。

向量的定义

Vector是一个旧类,经过重新设计以支持Collection Framework层次结构中的collection类。向量类也定义在 java.util 包,扩展者 摘要清单 类并由 清单 接口。 Vector类声明如下:

类向量

在此,E定义将存储在数组中的对象的类型。使用Vector类创建的数组的长度是可变的。如果未指定增量,则将其大小增加一倍。让我们了解如何使用Vector创建数组。


向量 V =新向量(1,1); V.addElement(“ Tech”); V.addElement(“ Differences”); System.out.ln(“添加2后的容量:” + V.capacity()); V.addElement(“ Between”); V.addElement(“ Vectors”); System.out.ln(“当前容量:” + V.capacity()); //加2后的输出容量:2当前容量:4

在上面的代码中,您可以看到,在声明字符串对象数组时,我分别在Vector的构造函数中特别提到了大小和增量值。因此,您可以观察到,随着数组限制的完成,它会按声明时提供给构造函数的值递增。

  1. 多个线程可以同时在ArrayList上运行,因此可以考虑 不同步。与ArrayList不同,一次只能有一个线程对一个向量进行操作。因此被称为 已同步.
  2. 在Java的早期版本中,某些类和接口会提供存储对象的方法,这些方法被称为Legacy类Vector是Java Legacy类中的一种。后来,对这些旧类进行了重新设计以支持Collection类,而ArrayList类是标准的Collection类。
  3. 当数组的极限被充分利用并且在耗尽的数组旁边添加一个新对象时,在两种情况下(例如,在ArrayList和Vector中),其大小都会增大,但是如果没有指定大小,则在ArrayList中是不同的如果没有指定增量值,则将向量数组的值增加当前数组的50%,而将向量数组的大小增加一倍。
  4. Vector使用Enumeration和Iterator遍历数组,而ArrayList仅使用Iterator遍历数组。
  5. 由于ArrayList是不同步的,并且许多线程可以同时对其进行操作,因此其性能要优于Vector(后者一次只能在一个线程上运行)的性能。

相似之处:

  1. ArrayList和Vector都在java.util包中定义。
  2. ArrayList和Vector都扩展了AbsractList类。
  3. ArrayList和Vector都实现List接口。
  4. ArrayList和Vector均用于创建根据需要增长的动态数组。
  5. ArrayList和Vector都保存对象引用。

结论:

最后,我说使用ArrayList比使用Vector更好,因为它执行得越来越快。