📜  Java中的向量与数组列表

📅  最后修改于: 2022-05-13 01:55:29.246000             🧑  作者: Mango

Java中的向量与数组列表

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

句法:

ArrayList: ArrayList al = new ArrayList();

Vector: Vector v = new Vector(); 

Java中的 Vector 与 ArrayList

S. No.ArrayListVector
1.ArrayList is not synchronized.Vector is synchronized.
2.ArrayList increments 50% of the current array size if the number of elements exceeds ts capacity.Vector increments 100% means doubles the array size if the total number of elements exceeds its capacity.
3.ArrayList is not a legacy class. It is introduced in JDK 1.2.Vector is a legacy class.
4.ArrayList is fast because it is non-synchronized.Vector is slow because it is synchronized, i.e., in a multithreading environment, it holds the other threads in a runnable or non-runnable state until the current thread releases the lock of the object.
5.ArrayList uses the Iterator interface to traverse the elements.A Vector can use the Iterator interface or Enumeration interface to traverse the elements.

ArrayList 和 Vector 的显着区别:

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

ArrayList 与 Vector Java

  • 性能: ArrayList 更快。由于它是非同步的,而向量操作由于它们是同步的(线程安全的)而提供较慢的性能,如果一个线程在一个向量上工作,它已经获得了一个锁,这迫使任何其他想要在它上工作的线程必须等到锁被释放。
  • 数据增长: ArrayList 和 Vector都动态增长和收缩以保持对存储的最佳使用——但它们调整大小的方式不同。如果元素数量超过其容量,ArrayList 会增加当前数组大小的 50%,而 vector 会增加 100%——实际上是当前数组大小的两倍。
  • 遍历: Vector 可以同时使用Enumeration 和 Iterator来遍历向量元素,而 ArrayList 只能使用Iterator进行遍历。
  • 应用程序:大多数时候,程序员更喜欢 ArrayList 而不是 Vector,因为 ArrayList 可以使用 Collections.synchronizedList 显式同步。
Java
// Java Program to illustrate use
// of ArrayList and Vector in Java
 
import java.io.*;
import java.util.*;
 
class GFG
{
    public static void main (String[] args)
    {
        // creating an ArrayList
        ArrayList al = new ArrayList();
 
        // adding object to arraylist
        al.add("Practice.GeeksforGeeks.org");
        al.add("quiz.GeeksforGeeks.org");
        al.add("code.GeeksforGeeks.org");
        al.add("contribute.GeeksforGeeks.org");
 
        // traversing elements using Iterator'
        System.out.println("ArrayList elements are:");
        Iterator it = al.iterator();
        while (it.hasNext())
            System.out.println(it.next());
 
        // creating Vector
        Vector v = new Vector();
        v.addElement("Practice");
        v.addElement("quiz");
        v.addElement("code");
 
        // traversing elements using Enumeration
        System.out.println("\nVector elements are:");
        Enumeration e = v.elements();
        while (e.hasMoreElements())
            System.out.println(e.nextElement());
    }
}


输出
ArrayList elements are:
Practice.GeeksforGeeks.org
quiz.GeeksforGeeks.org
code.GeeksforGeeks.org
contribute.GeeksforGeeks.org

Vector elements are:
Practice
quiz
code

如何在 ArrayList 和 Vector 之间进行选择?

  • ArrayList 是不同步的并且不是线程安全的,而 Vectors 是。只有一个线程可以调用 Vector 上的方法,这有点开销,但在考虑安全性时很有帮助。因此,在单线程情况下,ArrayList 是显而易见的选择,但在涉及多线程时,向量通常更可取。
  • 如果我们不知道我们将拥有多少数据但知道它的增长速度,Vector 有一个优势,因为我们可以在向量中设置增量值。
  • ArrayList 更新更快。如果我们对使用它们中的任何一个都没有任何明确要求,我们使用 ArrayList 而不是向量。