ArrayList和Vector的區別

2021-04-09 10:12:52 字數 960 閱讀 1294

兩個用法差不多,都是實現list介面,區別在於vector是已同步的,所以效率上比較低一些。一般,在不需要同步時應該使用arraylist,反之使用vector。可以看一下文件或原始碼。 j2se doc上面很清楚,the arraylist class is roughly equivalent to vector, except that it is unsynchronized. 及多個執行緒同時使用乙個arraylist時,當又乙個執行緒改變了arraylist的內容時

需要用collections.synchronizedlist來同步

vector類和arraylist類的主要不同之處在於同步。除了兩個只用於序列化的方法,沒有乙個arraylist的方法具有同步執行的能力;相反,vector的大多數方法具有同步能力,或直接或間接。因此,vector是執行緒安全的,但arraylist不是。這使得arraylist要比vector快速。對於一些最新的jvm,兩個類在速度上的差異可以忽略不計:嚴格地說,對於這些jvm,這兩個類在速度上的差異小於比較這些類效能的測試所顯示的時間差異。

通過索引訪問和更新元素時,vector和arraylist的實現有著卓越的效能,因為不存在除範圍檢查之外的其他開銷。除非內部陣列空間耗盡必須進行擴充套件,否則,向列表的末尾新增元素或者從列表的末尾刪除元素時,都同樣有著優秀的效能。插入元素和刪除元素總是要進行陣列複製(當陣列先必須進行擴充套件時,需要兩次複製)。被複製元素的數量和[size-index]成比例,即和插入/刪除點到集合中最後索引位置之間的距離成比例。對於插入操作,把元素插入到集合最前面(索引0)時效能最差,插入到集合最後麵時(最後乙個現有元素之後)時效能最好。隨著集合規模的增大,陣列複製的開銷也迅速增加,因為每次插入操作必須複製的元素數量增加了。

只要不需要同步就用arraylist,事實上arraylist的存在基本上就是為了淘汰vector,因為大多數情況下我們只是需要乙個動態儲存器,而不涉及同步問題。當然,考慮到有可能會有同步的需要以及像以前版本相容vector依然本保留下來。

Array List和ArrayList的區別與

定義 public abstract class array icloneable,ilist,icollection,ienumerable,istructuralcomparable,istructuraequatable 陣列在記憶體中是連續儲存的,所以它的索引速度是非常的快,而且賦值與修改元...

過載技巧 簡單實現string和Vector

1.賦值 下標 呼叫 和成員訪問箭頭 等操作符必須定義為成員,將這些操作符定義為非成員函式將在編譯時標記為錯誤。2.像賦值一樣,復合賦值操作符通常應定義為類的成員。與賦值不同的是,不一定非得這樣做,如果定義為非成員復合賦值操作符,不會出現編譯錯誤。3.改變物件狀態或與給定型別緊密聯絡的其他一些操作符...

LinkedList和ArrayList的區別

對於集合collection下的list介面,有兩個實現類,arraylist和linkedlist,那麼他們兩個有什麼區別呢。arraylist的底層由陣列實現,而linkedlist的底層由雙向鍊錶實現,底層的不同才是他們區別的根源。然而因為他們繼承於同乙個父介面,他們的很多方法都是相同的。關於...