Java中的Vector与 ArrayList比较

x33g5p2x  于2022-09-25 转载在 Java  
字(2.0k)|赞(0)|评价(0)|浏览(277)

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

ArrayList<T> al = new ArrayList<T>();
 Vector<T> v = new Vector<T>();

ArrayList 和 Vector 的主要区别:

  1. **同步:**Vector 是同步的,即一次只能有一个线程访问代码,而 ArrayList 是不同步的,即多个线程可以同时处理 ArrayList。例如,如果一个线程正在执行添加操作,那么在多线程环境中可能有另一个线程执行删除操作。
    如果多个线程同时访问 ArrayList,那么我们必须同步在结构上修改列表的代码块,或者允许简单的元素修改。结构修改意味着从列表中添加或删除元素。设置现有元素的值不是结构修改。
  2. 性能: ArrayList 更快,因为它是非同步的,而向量操作由于它们是同步的(线程安全的)而提供较慢的性能。如果一个线程在一个向量上工作,它已经获得了一个锁,这迫使任何其他想要在它上工作的线程必须等到锁被释放。
    **数据增长:**ArrayList 和 Vector 都动态增长和收缩以保持对存储的最佳使用 - 但它们调整大小的方式不同。如果元素数量超过其容量,ArrayList 会增加当前数组大小的 50%,而 vector 会增加 100%——实际上是当前数组大小的两倍。
    **遍历:**Vector 可以同时使用 Enumeration 和 Iterator 来遍历 vector 的元素,而 ArrayList 只能使用 Iterator 进行遍历。
// Java Program to illustrate use of ArrayList 
// and Vector in Java 
import java.io.*; 
import java.util.*; 
  
class Solution 
{ 
    public static void main (String[] args) 
    { 
        // creating an ArrayList 
        ArrayList<String> al = new ArrayList<String>(); 
  
        // adding object to arraylist 
        al.add("Practice.dailycodebuffer.org"); 
        al.add("quiz.dailycodebuffer.org"); 
        al.add("code.dailycodebuffer.org"); 
        al.add("contribute.dailycodebuffer.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<String> v = new Vector<String>(); 
        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.dailycodebuffer.org
quiz.dailycodebuffer.org
code.dailycodebuffer.org
contribute.dailycodebuffer.org

Vector elements are:
Practice
quiz
code

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

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

相关文章

微信公众号

最新文章

更多