首先看這兩類都實現(xiàn)List接口截亦,而List接口一共有三個實現(xiàn)類肮疗,分別是ArrayList晶姊、Vector和LinkedList。List用于存放多個元素伪货,能夠維護(hù)元素的次序们衙,并且允許元素的重復(fù)。3個具體實現(xiàn)類的相關(guān)區(qū)別如下:
1. ArrayList是最常用的List實現(xiàn)類碱呼,內(nèi)部是通過數(shù)組實現(xiàn)的蒙挑,它允許對元素進(jìn)行快速隨機(jī)訪問。數(shù)組的缺點是每個元素之間不能有間隔巍举,當(dāng)數(shù)組大小不滿足時需要增加存儲能力脆荷,就要講已經(jīng)有數(shù)組的數(shù)據(jù)復(fù)制到新的存儲空間中。當(dāng)從ArrayList的中間位置插入或者刪除元素時懊悯,需要對數(shù)組進(jìn)行復(fù)制蜓谋、移動、代價比較高炭分。因此桃焕,它適合隨機(jī)查找和遍歷,不適合插入和刪除捧毛。
2. Vector與ArrayList一樣观堂,也是通過數(shù)組實現(xiàn)的,不同的是它支持線程的同步呀忧,即某一時刻只有一個線程能夠?qū)慥ector师痕,避免多線程同時寫而引起的不一致性,但實現(xiàn)同步需要很高的花費而账,因此胰坟,訪問它比訪問ArrayList慢。
3. LinkedList是用鏈表結(jié)構(gòu)存儲數(shù)據(jù)的泞辐,很適合數(shù)據(jù)的動態(tài)插入和刪除笔横,隨機(jī)訪問和遍歷速度比較慢竞滓。另外,他還提供了List接口中沒有定義的方法吹缔,專門用于操作表頭和表尾元素商佑,可以當(dāng)作堆棧、隊列和雙向隊列使用厢塘。
4. vector是線程(Thread)同步(Synchronized)的茶没,所以它也是線程安全的,而Arraylist是線程異步(ASynchronized)的俗冻,是不安全的礁叔。如果不考慮到線程的安全因素,一般用Arraylist效率比較高迄薄。
5. 如果集合中的元素的數(shù)目大于目前集合數(shù)組的長度時琅关,vector增長率為目前數(shù)組長度的100%,而arraylist增長率為目前數(shù)組長度的50%.如過在集合中使用數(shù)據(jù)量比較大的數(shù)據(jù),用vector有一定的優(yōu)勢讥蔽。
6. 如果查找一個指定位置的數(shù)據(jù)涣易,vector和arraylist使用的時間是相同的,都是0(1),這個時候使用vector和arraylist都可以冶伞。而如果移動一個指定位置的數(shù)據(jù)花費的時間為0(n-i)n為總長度新症,這個時候就應(yīng)該考慮到使用Linkedlist,因為它移動一個指定位置的數(shù)據(jù)所花費的時間為0(1),而查詢一個指定位置的數(shù)據(jù)時花費的時間為0(i)。ArrayList 和Vector是采用數(shù)組方式存儲數(shù)據(jù)响禽,此數(shù)組元素數(shù)大于實際存儲的數(shù)據(jù)以便增加和插入元素徒爹,都允許直接序號索引元素,但是插入數(shù)據(jù)要設(shè)計到數(shù)組元素移動 等內(nèi)存操作芋类,所以索引數(shù)據(jù)快插入數(shù)據(jù)慢隆嗅,Vector由于使用了synchronized方法(線程安全)所以性能上比ArrayList要差,LinkedList使用雙向鏈表實現(xiàn)存儲侯繁,按序號索引數(shù)據(jù)需要進(jìn)行向前或向后遍歷胖喳,但是插入數(shù)據(jù)時只需要記錄本項的前后項即可,所以插入數(shù)度較快贮竟!
7. 籠統(tǒng)來說:LinkedList:增刪改快丽焊,ArrayList:查詢快(有索引的存在)