arraylist,linklist,Vestor

http://blog.csdn.net/wangzff/article/details/7296648

ArrayList,LinkedList是不同步的,而Vestor是同步的

eg:Vestor中添加對象的方法public synchronized boolean add(E o)是加了synchronized 的。

ArrayList,Vestor的特點(diǎn)
內(nèi)部實現(xiàn)機(jī)制來講ArrayList和Vector都是使用Objec的數(shù)組形式來存儲的。
增加元素的時候,如果元素的數(shù)目超出了內(nèi)部數(shù)組目前的長度它們都需要擴(kuò)展內(nèi)部數(shù)組的長度,
Vector缺省情況下自動增長原來一倍的數(shù)組長度,ArrayList是原來的50%,
但是Vector可以使用下面的方法進(jìn)行設(shè)置。

public vector(int initialcapacity,int capacityIncrement) 
          initialcapacity:初始化容量,capacityIncrement擴(kuò)展倍數(shù)。

ArrayList,LinkedList的特點(diǎn)
一般大家都知道ArrayList和LinkedList的大致區(qū)別:
1.ArrayList是實現(xiàn)了基于動態(tài)數(shù)組的數(shù)據(jù)結(jié)構(gòu),LinkedList基于鏈表的數(shù)據(jù)結(jié)構(gòu)。
2.對于隨機(jī)訪問get和set,ArrayList覺得優(yōu)于LinkedList,因為LinkedList要移動指針。
3.對于新增和刪除操作add和remove,LinedList比較占優(yōu)勢,因為ArrayList要移動數(shù)據(jù)。

ArrayList,LinkedList的消耗1
1.對ArrayList和LinkedList而言,在列表末尾增加一個元素所花的開銷都是固定的。
對 ArrayList而言,主要是在內(nèi)部數(shù)組中增加一項,指向所添加的元素,偶爾可能會導(dǎo)致對數(shù)組重新進(jìn)行分配
;而對LinkedList而言,這個開銷是 統(tǒng)一的,分配一個內(nèi)部Entry對象。

2.在ArrayList的 中間插入或刪除一個元素意味著這個列表中剩余的元素都會被移動;而在LinkedList的中間插入或刪除一個元素的開銷是固定的。

3.LinkedList不 支持高效的隨機(jī)元素訪問。

4.ArrayList的空 間浪費(fèi)主要體現(xiàn)在在list列表的結(jié)尾預(yù)留一定的容量空間,而LinkedList的空間花費(fèi)則體現(xiàn)在它的每一個元素都需要消耗相當(dāng)?shù)目臻g

ArrayList,LinkedList的消耗2
ArrayList和Vector中,從指定的位置(用index)檢索一個對象,或在集合的末尾插入、刪除一個對象的時間是一樣的,可表示為O(1)。但是,如果在集合的其他位置增加或移除元素那么花費(fèi)的時間會呈線形增長:O(n-i),其中n代表集合中元素的個數(shù),i代表元素增加或移除元素的索引位置。為什么會這樣呢?以為在進(jìn)行上述操作的時候集合中第i和第i個元素之后的所有元素都要執(zhí)行(n-i)個對象的位移操作。
LinkedList中,在插入、刪除集合中任何位置的元素所花費(fèi)的時間都是一樣的—O(1),但它在索引一個元素的時候比較慢,為O(i),其中i是索引的位置。

結(jié)論:所以,如果只是查找特定位置的元素或只在集合的末端增加、移除元素,那么使用Vector或ArrayList都可以。
如果是對其它指定位置的插入、刪除操作,最好選擇LinkedList

測試添加的時候ArrayList,LinkedList的消耗
public class TestList {   
    static final int N=5000;   
    @SuppressWarnings({ "unchecked", "rawtypes" })
    
    static long timeList(List list){   
    long start=System.currentTimeMillis();   
    Object o = new Object();   
    for(int i=0;i<N;i++)   
        list.add(0, o);   
    return System.currentTimeMillis()-start;   
    }   
    
    @SuppressWarnings("rawtypes")
    public static void main(String[] args) {   
        System.out.println("ArrayList耗時:"+timeList(new ArrayList()));   
        System.out.println("LinkedList耗時:"+timeList(new LinkedList()));   
    }   
}  
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容