向量(Vector)实现的数组在添加或删除某些元素时会在运行时增大/缩小。使用整数索引访问其元素,容量和容量增量这两个字段代表向量(Vector)存储管理的特征。它实现了四个接口:

  • List
  • RandomAccess
  • Cloneable
  • Serializable

就像向量(Vector)一样,ArrayList也实现了四个接口。其大小可以在运行时更改。此外,它还有一个称为容量的字段,其大小与ArrayList的大小一样大。

VectorArrayList都可以从任何位置检索元素,也可以从容器类的末尾插入或删除元素。从API角度来看,向量(Vector)和ArrayList都非常相似。那么两者的区别到底在哪里呢?以下几点将阐明此问题:

  1. 同步: 向量(Vector)已同步,但ArrayList未同步。如果从ArrayList中添加或删除元素,则称为结构修改。当多个线程同时访问一个ArrayList并修改该列表的代码块时,则需要从外部同步该列表。简而言之,向量(Vector)内容是线程安全的,而ArrayList则不是。如果要求未提及线程安全集合,则应选择ArrayList,因为同步会影响性能。非同步的ArrayList很快。

  2. 数据增长:ArrayList和vector元素都存储为数组,但是vector的默认大小为10,而ArrayList没有默认的大小。 当将一个元素添加到ArrayList或vector时,这两个类都有可能耗尽空间。 在这种情况下,默认情况下,Vector的大小会加倍,而ArrayList的大小会增加50%。 对于向量可以设置一个增量值,这对于ArrayList是不可能的。

  3. 遍历元素: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());  
      }  
 }      
}

总结

  1. 如果要通过单个线程或某个局部变量修改容器类,则应使用ArrayList。
  2. 当容器类被多个线程访问时,最好使用向量,否则将必须进行手动同步。
  3. 可以使用vector和ArrayList来指定增量大小,而不能使用。
  4. 向量同步,而ArrayList不同步。
  5. 向量可以使大小增加一倍; ArrayList可以将其增加50%。
欢迎任何形式的转载,但请务必注明出处,尊重他人劳动成果。
转载请注明:文章转载自 有区别网 [http://www.vsdiffer.com]
本文标题:ArrayList和Vector
本文链接:https://www.vsdiffer.com/vs/arraylist-vs-vector.html
免责声明:以上内容仅是站长个人看法、理解、学习笔记、总结和研究收藏。不保证其正确性,因使用而带来的风险与本站无关!如本网站内容冒犯了您的权益,请联系站长,邮箱: ,我们核实并会尽快处理。