1. 程式人生 > >ArrayList 和 LinkedList 和Vector使用上有什麼區別?實現上有什麼區別?

ArrayList 和 LinkedList 和Vector使用上有什麼區別?實現上有什麼區別?

ArrayList 和 Vector 使用上有什麼區別?實現上有什麼區別?

Vector和ArrayList在使用上非常相似,都可用來表示一組數量可變的物件應用

的集合,並且可以隨機地訪問其中的元素。
1 Vector的方法都是同步的(Synchronized),是執行緒安全的(thread-safe),而

ArrayList的方法不是,由於執行緒的同步必然要影響效能,因此,ArrayList的性

能比Vector好。
2 當Vector或ArrayList中的元素超過它的初始大小時,Vector會將它的容量翻

倍,而ArrayList只增加50%的大小,這樣,ArrayList就有利於節約記憶體空間。

ArrayList 和 LinkedList 使用上有什麼區別?實現上有什麼區別?

對於處理一列資料項,Java提供了兩個類ArrayList和LinkedList,ArrayList的內部實現是基於內部陣列Object[],所以從概念上講,它更像陣列,但LinkedList的內部實現是基於一組連線的記錄,所以,它更像一個連結串列結構,所以,它們在效能上有很大的差別。
在ArrayList的前面或中間插入資料時,必須將其後的所有資料相應的後移,這樣必然要花費較多時間,所以,當你的操作是在一列資料的後面新增資料而不是在前面或中間,並且需要隨機地訪問其中的元素時,使用ArrayList會提供比較好的效能;
而訪問連結串列中的某個元素時,就必須從連結串列的一端開始沿著連線方向一個一個元素地去查詢,直到找到所需的元素為止,所以,當你的操作是在一列資料的前面或中間新增或刪除資料,並且按照順序訪問其中的元素時,就應該使用LinkedList了。
如果在程式設計中,兩種情形交替出現,這時,可以考慮使用List這樣的通用介面,而不用關心具體的實現,在具體的情形下,它的效能由具體的實現來保證。
案例:LinkedList 實現堆疊
案例說明
ArrayList的查詢效率比較高,增刪動作的效率比較差,適用於查詢比較頻繁,增刪動作較少的元素管理的集合。LinkedList的查詢效率低,但是增刪效率很高。適用於增刪動作的比較頻繁,查詢次數較少的元素管理集合。
ArrayList,LinkedList都是執行緒不安全的。
實現堆疊 1)陣列(ArrayList,增刪效率比較低,不適合)
2)LinkedList(實現堆疊的好方法)
3)java.util.Stack類,Stack是Vector的子類,Vector類是一個執行緒安全的(是一個重量級的類),並繼承了Vector的方法,Verctor類和ArrayList的功能近乎相同。(不推薦使用Stack類來實現堆疊)。
實現過程

import java.util.*;
public class TestStack {
       public static void main(String[] args) {
               MyStack ms=new MyStack();
               ms.push("Chenzq");
               ms.push("Liucy");
               ms.push("BaiLu");
               System.out.println(ms.pop());
               System.out
.println(ms.pop()); System.out.println(ms.pop()); } } class MyStack{ private LinkedList ll=new LinkedList(); public void push(Object o){ ll.addFirst(o); } public Object pop(){ return ll.removeFirst(); } }