1. 程式人生 > >ArrayList 和 Vector 及 LinkedList

ArrayList 和 Vector 及 LinkedList

1. Vector & ArrayList 
1)  Vector的方法都是同步的(Synchronized),是執行緒安全的(thread-safe),而ArrayList的方法不是,由於執行緒的同步必然要影響效能,因此,ArrayList的效能比Vector好。 
2) 當Vector或ArrayList中的元素超過它的初始大小時,Vector會將它的容量翻倍,而ArrayList只增加50%的大小,這樣,ArrayList就有利於節約記憶體空間。

2. Hashtable & HashMap 
Hashtable和HashMap它們的效能方面的比較類似 Vector和ArrayList,比如Hashtable的方法是同步的,而HashMap的不是。


3. ArrayList & LinkedList

ArrayList的內部實現是基於內部陣列Object[],所以從概念上講,它更象陣列,但LinkedList的內部實現是基於一組連線的記錄,所以,它更象一個連結串列結構,所以,它們在效能上有很大的差別: 
       從上面的分析可知,在ArrayList的前面或中間插入資料時,你必須將其後的所有資料相應的後移,這樣必然要花費較多時間,所以,當你的操作是在一列 資料的後面新增資料而不是在前面或中間,並且需要隨機地訪問其中的元素時,使用ArrayList會提供比較好的效能; 而訪問連結串列中的某個元素時,就必須從連結串列的一端開始沿著連線方向一個一個元素地去查詢,直到找到所需的元素為止,所以,當你的操作是在一列資料的前面或中 間新增或刪除資料,並且按照順序訪問其中的元素時,就應該使用LinkedList了。 

ArrayList 讀取更快,LinkedList 增刪更快
 

如果在程式設計中,1、2兩種情形交替出現,這時,你可以考慮使用List這樣的通用介面,而不用關心具體的實現,在具體的情形下,它的效能由具體的實現來保證。


4. 配置集合類的初始大小 
    在Java集合框架中的大部分類的大小是可以隨著元素個數的增加而相應的增加的,我們似乎不用關心它的初始大小,但如果我們考慮類的效能問題時,就一定要考慮儘可能地設定好集合物件的初始大小,這將大大提高程式碼的效能。 
    比如,Hashtable預設的初始大小為101,載入因子為0.75,即如果其中的元素個數超過75個,它就必須增加大小並重新組織元素,所以,如果你 知道在建立一個新的Hashtable物件時就知道元素的確切數目如為110,那麼,就應將其初始大小設為110/0.75=148,這樣,就可以避免重 新組織記憶體並增加大小。