Java中ArrayList和Vector的區別

來源:互聯網
上載者:User

是的, 這是一個太多太多人遇到過, 討論過, 解釋過的問題.
為了加深自己的記憶, 還是決定寫一篇來記錄下他.

首先想說的是:
Vector是在Collections API之前就已經產生了的, 而ArrayList是在JDK1.2的時候才作為Collection framework的一部分引入的.  它們都是在內部用一個Obejct[]來儲存元素的.

ok, 現在來說他們的差別:
1. 安全執行緒
Vector是同步的, 而ArrayList不是.
因為Vector是同步的, 所以它是安全執行緒的.
同樣, 因為Vecotr是同步的, 所以他需要額外的開銷來維持同步鎖, 所以它要比ArrayList要慢.(理論上來說)

當然, 如果你對ArrayList有偏好, 你也可以用Collection.synchronizedList(List)來得到一個安全執行緒的List.

2. 容量增長
Vector允許使用者佈建capacityIncrement這樣在每次需要擴充數組的size的時候, Vector會嘗試按照預先設定的capacityIncrement作為增量來設定, 而ArrayList則會把數組的大小擴大一倍.

比如現在同樣一個長度為10的Vector和ArrayList, 我們把Vector的capacityIncrement設為1
那麼我們在插入第11個對象的時候, Vector會將長度變成11, 然後分配空間, 然後將對象添加進去, 而ArrayList則會分配20個對象的空間, 然後將對象添加進去.

如果capacityIncrement設為0或者負值, Vector就會做和ArrayList一樣, 每次都將數組大小擴大一倍.

3. 效能比較
剛剛在上面已經說過了, 由於Vector是同步的, 而ArrayList不是, 所以Vector的效能要比ArrayList要稍第一點, 用效能換安全嘛.

不過, 據Jack Shirazi在OnJava上的一篇文章來看, 似乎這並不是什麼問題, 他認為對於現在的JVM來說, 這兩個類在同步這個問題上的效能差異, 甚至還不如每次跑測試的時候環境變化引起的差異大.
Consequently Vector is thread-safe, and ArrayList isn't. This makes ArrayList faster than Vector. For some of the latest JVMs the difference in speed between the two classes is negligible: strictly speaking, for these JVMs the difference in speed between the two classes is less than the variation in times obtained from tests comparing the performance of these classes. ---- The Performance of Java's Lists

這樣看來, 效能上的差別應該不大.

So, as a conclusion.
結論和網上大多數人得到的結論一樣:
在一般情況下, 還是鼓勵用ArrayList的, 如果你有同步控制的需要, 那就用Vector吧, 也懶得用Collection.synchronizedList(List)再去轉一次了, 除非非這樣不可.. 不然還是順應潮流, 畢竟, 代碼是寫給人看的. 在無傷大雅的情況下, 按照common的法則來寫, 無疑會讓看代碼的人更快理解.

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.