ArrayList、LinkedList、Vector的區別

一、 ArrayList底層是採用數組實現的(而且改數組的類型是Object類型的)2 若是是jdk6的話,採用Array.of()方法來生成一個新的數組,若是是jdk5.0的話,使用的是System.arraycopy方法(將數組拷貝)
3 、List list = new ArrayList();時,底層會生成一個長度爲10的數組來存放對象,若是預先知道list
會存放多少個對象的話,最好經過new ArrayList(int length)的方式先肯定數組的最小長度,如new
ArrayList(50),這樣能提升底層的效率。
4 、對於ArrayList與Vector來講,底層都是採用數組方式來實現的(該數組是一個Object類型的數組)
五、 對於ArrayList,全部方法都不是同步的,對於Vector,大部分是public的方法都是同步的。
六、LinkedList底層是由雙向循環鏈表實現的,對於ArrayList,查找速度很是快,增長和刪除操做很是
慢。(本質上是由數組的特色來決定的)
七、對於LinkList,查找速度很是慢,增長和刪除操做很是快。(本質上是由雙向循環鏈表的特色來決定
的)
1、同步性數組

ArrayList,LinkedList是不一樣步的,而Vestor是的。因此若是要求線程安全的話,可使用ArrayList或LinkedList,能夠節省爲同步而耗費開銷。但在多線程的狀況下,有時候就不得不使用Vector了。固然,也能夠經過一些辦法包裝ArrayList,LinkedList,使他們也達到同步,但效率可能會有所下降。安全

2、數據增加
從內部實現機制來說ArrayList和Vector都是使用Objec的數組形式來存儲的。當你向這兩種類型中增長元素的時候,若是元素的數目超出了內部數組目前的長度它們都須要擴展內部數組的長度,Vector缺省狀況下自動增加原來一倍的數組長度,ArrayList是原來的50%,因此最後你得到的這個集合所佔的空間老是比你實際須要的要大。因此若是你要在集合中保存大量的數據那麼使用Vector有一些優點,由於你能夠經過設置集合的初始化大小來避免沒必要要的資源開銷。多線程

3、檢索、插入、刪除對象的效率線程

ArrayList和Vector中,從指定的位置(用index)檢索一個對象,或在集合的末尾插入、刪除一個對象的時間是同樣的,可表示爲O(1)。可是,若是在集合的其餘位置增長或移除元素那麼花費的時間會呈線形增加:O(n-i),其中n表明集合中元素的個數,i表明元素增長或移除元素的索引位置。爲何會這樣呢?覺得在進行上述操做的時候集合中第i和第i個元素以後的全部元素都要執行(n-i)個對象的位移操做。
LinkedList中,在插入、刪除集合中任何位置的元素所花費的時間都是同樣的—O(1),但它在索引一個元素的時候比較慢,爲O(i),其中i是索引的位置。對象

因此,若是隻是查找特定位置的元素或只在集合的末端增長、移除元素,那麼使用Vector或ArrayList均可以。若是是對其它指定位置的插入、刪除操做,最好選擇LinkedList索引

相關文章
相關標籤/搜索