Java 中的容器物件,例如 Vector 和 ArrayList 是什麼?


Vector 和 ArrayList 都實現了 List 介面,並且它們都使用(動態可調整大小的)陣列作為其內部資料結構,類似於使用普通陣列。

但是,ArrayList 和 Vector 類之間存在許多差異,因此透過閱讀本文,您將瞭解 ArrayList 和 Vector 類是什麼以及它們的主要區別,這將幫助您選擇哪一個。

瞭解 ArrayList 和 Vector 類

除了 Arrays 類之外,Java 還提供了一個 ArrayList 類,可用於建立儲存物件列表的容器。

ArrayList 被認為是可增長的陣列,它為您提供快速迭代和快速隨機訪問。

ArrayList 的語法如下

ArrayList: ArrayList<T> al = new ArrayList<T>();

示例

這是一個說明 ArrayList 如何儲存和遍歷元素的示例

import java.util.*; public class TestArrayList21{ public static void main(String args[]){ List<String> al=new ArrayList<String>(); //creating arraylist al.add("Mike"); //adding object in arraylist al.add("Jack"); al.add("Rose"); al.add("James"); //traversing elements using Iterator Iterator itr=al.iterator(); while(itr.hasNext()){ System.out.println(itr.next()); } } }

執行上述程式時,將得到以下結果。

輸出

Mike
Jack
Rose
James

另一方面,早期版本的 Java 具有一個名為 Vector 的遺留集合類,它與 ArrayList 非常相似,並實現了動態陣列。

ArrayList 的語法如下 −

Vector: Vector<T> v = new Vector<T>();

示例

這是一個說明使用 Enumeration 介面的 Java Vector 類的示例

import java.util.*; public class TestVector1{ public static void main(String args[]){ Vector<String> v=new Vector<String>(); //creating vector v.add("Stephanie"); //method of Collection v.addElement("Amith"); //method of Vector v.addElement("Andros"); //traversing elements using Enumeration Enumeration e=v.elements(); while(e.hasMoreElements()){ System.out.println(e.nextElement()); } } }

執行上述程式時,將得到以下結果。

輸出

Stephanie
Amith
Andros

ArrayList 和 Vector 之間的區別

基於以下因素,ArrayList 和 Vector 類之間存在某些差異,如下所示。

同步

Vector 是同步的,因此一次只有一個執行緒可以訪問程式碼,而 ArrayList 不是同步的,因此多個執行緒可以同時處理 ArrayList。

例如,在多執行緒環境中,如果一個執行緒正在執行新增操作,則另一個執行緒可能正在執行刪除操作。如果多個執行緒同時訪問 ArrayList,則需要同步修改列表結構的程式碼塊或允許簡單的元素修改。結構修改是從列表中新增或刪除元素。更改現有元素的值不是結構修改。

效能

由於 ArrayList 是非同步的,因此它更快,而 Vector 操作的效能較慢,因為它們是同步的(執行緒安全的),因此當一個執行緒處理 Vector 時,它會獲取一個鎖,這會強制其他執行緒等待直到鎖釋放後才能處理它。

資料增長

為了保持儲存的最佳利用,ArrayList 和 Vector 都可以動態增長和收縮 - 但它們調整大小的方式完全不同。

通常,如果元素總數超過其容量,ArrayList 會將當前陣列大小增加 50%,而 Vector 會增加 100% - 本質上是將當前陣列大小加倍,如果元素總數超過其容量。

遍歷

為了遍歷 Vector 元素,通常,Vector 使用 Enumeration 和 Iterator,而 ArrayList 僅使用 Iterator。

應用

大多數程式設計師更喜歡 ArrayList 而不是 Vector,因為 ArrayList 可以使用 Collections 顯式同步。

注意− 當沒有具體要求使用 Vector 時,開發人員最常首選 ArrayList。

示例

這是一個說明在 Java 中使用 ArrayList 和 Vector 的 Java 程式 −

import java.io.*; import java.util.*; public class Test{ public static void main (String[] args){ // creating an ArrayList ArrayList<String> al = new ArrayList<String>(); // adding object to arraylist al.add("Learn.tutorialspoint.com"); al.add("Coding.tutorialspoint.com"); al.add("Practice.tutorialspoint.com"); al.add("Test.tutorialspoint.com"); // 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("Learn"); v.addElement("Practice"); v.addElement("Coding"); // traversing elements using Enumeration System.out.println("
Vector elements are:"
); Enumeration e = v.elements(); while (e.hasMoreElements()) System.out.println(e.nextElement()); } }

執行上述程式時,將生成以下輸出

輸出

ArrayList elements are:
Learn.tutorialspoint.com
Coding.tutorialspoint.com
Practice.tutorialspoint.com
Test.tutorialspoint.com
Vector elements are:
Learn
Practice
Coding

總結

透過以上討論,我們希望您更好地理解了像 ArrayList 和 Vector 這樣的 Java 容器物件。以下是我們上面討論內容的總結。

  • ArrayList 是不同步的,也不是執行緒安全的,而 Vector 是同步的。

  • Vector 只能由一個執行緒呼叫,這會產生一些開銷,但在安全性至關重要時很有幫助。因此,在單執行緒情況下,ArrayList 最為可取,而在多執行緒情況下,Vector 是最明顯的選擇。

  • 如果我們不確定將有多少資料,但知道其增長速度,則 Vector 具有優勢,因為我們可以在 Vector 中設定增量值。Vector 增量為 100%,這意味著如果元素總數超過其容量,則陣列大小加倍。

  • ArrayList 較新且速度更快。因此,如果您對使用兩者中的任何一個沒有明確的要求,則可以使用 ArrayList 而不是 Vector。

我們希望本文對您有所幫助。如果您喜歡本文,請與您的同事分享,如果您有任何其他疑問,請在下方評論。

更新於:2022年10月13日

617 次檢視

開啟您的 職業生涯

透過完成課程獲得認證

開始學習
廣告