Java中的Vector与ArrayList

Java中的Vector与ArrayList

ArrayList和Vector都实现了List接口,两者都使用 (动态可调整大小的)数组 作为其内部数据结构,就像使用普通数组一样。

语法:

ArrayList: ArrayList al = new ArrayList();

Vector: Vector v = new Vector();

ArrayList与Vector的比较

编号 ArrayList Vector
1. ArrayList未同步。 Vector已同步。
2. 如果元素数量超过其容量,则ArrayList会将其当前数组大小增加50%。 如果元素数量超过其容量,则Vector将其数组大小增加100%(即加倍)。
3. ArrayList不是一个遗留类。它是在JDK 1.2中引入的。 Vector是一个遗留类。
4. ArrayList速度快,因为它不同步。 Vector速度慢,因为它同步,即在多线程环境中,它会将其他线程保持在可运行或不可运行状态,直到当前线程释放对象的锁。
5. ArrayList使用Iterator接口来遍历元素。 Vector可以使用Iterator接口或Enumeration接口来遍历元素。
6. ArrayList性能高。 Vector性能低。
7. 允许多线程。 仅允许一个线程。

ArrayList和Vector之间的重要差异:

  • 同步: Vector是 同步的 ,这意味着同一时间只有一个线程可以访问代码,而ArrayList是 未同步的 ,这意味着多个线程可以同时在ArrayList上工作。例如,在多线程环境中,如果一个线程正在执行添加操作,那么就可能会有另一个线程执行删除操作。如果多个线程同时访问ArrayList,则必须同步修改列表结构的代码块或允许简单的元素修改。结构修改是指向列表中添加或删除元素。设置现有元素的值不是结构性修改。

Java中的Vector与ArrayList

  • 性能: ArrayList更快。因为它是非同步的,而vector操作由于是同步的(线程安全),所以性能较慢,如果一个线程在向量上工作,它已经获得了对它的锁定,这将强制其他想要在它上工作的线程等待,直到锁定被释放。
  • 数据增长: ArrayList和Vector都动态增加和缩小以实现存储的最佳利用 — 但它们调整大小的方式是不同的。如果元素数量超过其容量,ArrayList会将其当前数组大小增加50%,而vector会增加100% — 从本质上说是将当前数组大小加倍。
  • 遍历: Vector可以使用Enumeration和Iterator遍历向量元素,而ArrayList只能使用Iterator遍历。
  • 应用程序: 大多数时候,程序员更喜欢ArrayList而不是Vector,因为可以使用Collections.synchronizedList显式地对ArrayList进行同步处理。

如何获得同步的arraylist对象:

默认情况下,arraylist对象是非同步的,但是我们可以使用collection类中的Synchronized List()方法获得synchronized版本的arraylist。

/*不要在这里写包名称*/
  
import java.io.*;
  
class GFG {
    public static void main (String[] args) {
        public static List SynchronizedList(list1)
          //非同步
          ArrayList l1 = new ArrayList();
          //同步
          List l= Collections.SynchronizedList(l1);
    }
}

注意: ArrayList是首选的,当没有特定要求使用vector时。

// Java程序演示在Java中使用ArrayList和Vector的用法
  
import java.io.*;
import java.util.*;
  
class GFG
{
    public static void main (String[] args)
    {
        // 创建ArrayList
        ArrayList<String> al = new ArrayList<String>();
  
        //添加对象到ArrayList
        al.add("Practice.GeeksforGeeks.org");
        al.add("www.GeeksforGeeks.org");
        al.add("code.GeeksforGeeks.org");
        al.add("contribute.GeeksforGeeks.org");
  
        //使用Iterator遍历元素
        System.out.println("ArrayList elements are:");
        Iterator it = al.iterator();
        while (it.hasNext())
            System.out.println(it.next());
  
        // 创建Vector
        Vector<String> v = new Vector<String>();
        v.addElement("Practice");
        v.addElement("quiz");
        v.addElement("code");
  
        //使用枚举遍历元素
        System.out.println("\nVector elements are:");
        Enumeration e = v.elements();
        while (e.hasMoreElements())
            System.out.println(e.nextElement());
    }
}

输出

ArrayList elements are:
Practice.GeeksforGeeks.org
www.GeeksforGeeks.org
code.GeeksforGeeks.org
contribute.GeeksforGeeks.org

Vector elements are:
Practice
quiz
code

如何选择ArrayList和Vector?

  • ArrayList不是同步的并且不安全,而Vector是安全的。只有一个线程可以在Vector上调用方法,这在具有安全性时略有开销,因此在单线程的情况下,ArrayList是显而易见的选择,但在多线程情况下,通常会选择使用Vectors。
  • 如果我们不知道将有多少数据,但知道它增长的速率,则Vector具有优势,因为我们可以设置Vetor的增量值。
  • ArrayList是更新更快的。如果我们没有任何明确的使用要求,我们应该使用ArrayList而不是Vector。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程