對於處理一列數據項,Java提供了兩個類ArrayList和LinkedList,ArrayList的內部實現是基於內部數組Object[],因此從概念上講,它更像數組,但LinkedList的內部實現是基於一組鏈接的記錄,因此,它更像一個鏈表結構,因此,它們在性能上有很大的差異。
在ArrayList的前面或中間插入數據時,必須將其後的全部數據相應的後移,這樣必然要花費較多時間,因此,當你的操做是在一列數據的後面添加數據而不是在前面或中間,而且須要隨機地訪問其中的元素時,使用ArrayList會提供比較好的性能;
而訪問鏈表中的某個元素時,就必須從鏈表的一端開始沿着鏈接方向一個一個元素地去查找,直到找到所需的元素爲止,因此,當你的操做是在一列數據的前面或中間添加或刪除數據,而且按照順序訪問其中的元素時,就應該使用LinkedList了。
若是在編程中,兩種情形交替出現,這時,能夠考慮使用List這樣的通用接口,而不用關心具體的實現,在具體的情形下,它的性能由具體的實現來保證。
案例:LinkedList 實現堆棧
案例說明
ArrayList的查詢效率比較高,增刪動做的效率比較差,適用於查詢比較頻繁,增刪動做較少的元素管理的集合。LinkedList的查詢效率低,可是增刪效率很高。適用於增刪動做的比較頻繁,查詢次數較少的元素管理集合。java
Vector和ArrayList在使用上很是類似,均可用來表示一組數量可變的對象應用編程
的集合,而且能夠隨機地訪問其中的元素。
1 Vector的方法都是同步的(Synchronized),是線程安全的(thread-safe),而數組
ArrayList的方法不是,因爲線程的同步必然要影響性能,所以,ArrayList的性安全
能比Vector好。
2 當Vector或ArrayList中的元素超過它的初始大小時,Vector會將它的容量翻性能
倍,而ArrayList只增長50%的大小,這樣,ArrayList就有利於節約內存空間。spa