http://www.cnblogs.com/muzongyan/articles/1782788.html html
同步性數組
Vector是同步的。這個類中的一些方法保證了Vector中的對象是線程安全的。而ArrayList則是異步 安全
的,所以ArrayList中的對象並非線程安全的。由於同步的要求會影響執行的效率,因此若是你不 異步
須要線程安全的集合那麼使用ArrayList是一個很好的選擇,這樣能夠避免因爲同步帶來的沒必要要的 ide
性能開銷。 性能
數據增加線程
從內部實現機制來說ArrayList和Vector都是使用數組(Array)來控制集合中的對象。當你向這兩種類 htm
型中增長元素的時候,若是元素的數目超出了內部數組目前的長度它們都須要擴展內部數組的長度, 對象
Vector缺省狀況下自動增加原來一倍的數組長度,ArrayList是原來的50%,因此最後你得到的這個集 blog
合所佔的空間老是比你實際須要的要大。因此若是你要在集合中保存大量的數據那麼使用Vector有一
些優點,由於你能夠經過設置集合的初始化大小來避免沒必要要的資源開銷。
使用模式
在ArrayList和Vector中,從一個指定的位置(經過索引)查找數據或是在集合的末尾增長、移除一
個元素所花費的時間是同樣的,這個時間咱們用O(1)表示。可是,若是在集合的其餘位置增長或移除
元素那麼花費的時間會呈線形增加:O(n-i),其中n表明集合中元素的個數,i表明元素增長或移除元
素的索引位置。爲何會這樣呢?覺得在進行上述操做的時候集合中第i和第i個元素以後的全部元素
都要執行位移的操做。這一切意味着什麼呢?
這意味着,你只是查找特定位置的元素或只在集合的末端增長、移除元素,那麼使用Vector或
ArrayList均可以。若是是其餘操做,你最好選擇其餘的集合操做類。好比,LinkList集合類在增長
或移除集合中任何位置的元素所花費的時間都是同樣的—O(1),但它在索引一個元素的使用缺比較慢
-O(i),其中i是索引的位置.使用ArrayList也很容易,由於你能夠簡單的使用索引來代替建立
iterator對象的操做。LinkList也會爲每一個插入的元素建立對象,全部你要明白它也會帶來額外的開
銷。
最後,在《Practical Java》一書中Peter Haggar建議使用一個簡單的數組(Array)來代替Vector
或ArrayList。尤爲是對於執行效率要求高的程序更應如此。由於使用數組(Array)避免了同步、額外
的方法調用和沒必要要的從新分配空間的操做。