ArrayList是實現了基于動態數組的數據結構,LinkedList基于鏈表的數據結構。
1.對ArrayList和LinkedList而言,在列表末尾增加一個元素所花的開銷都是固定的。對ArrayList而言,主要是在內部數組中增加一項,指向所添加的元素,偶爾可能會導致對數組重新進行分配;而對LinkedList而言,這個開銷是統一的,分配一個內部Entry對象。
2.在ArrayList的中間插入或刪除一個元素意味著這個列表中剩余的元素都會被移動;而在LinkedList的中間插入或刪除一個元素的開銷是固定的。
3.LinkedList不支持高效的隨機元素訪問。
4.ArrayList的空間浪費主要體現在在list列表的結尾預留一定的容量空間,而LinkedList的空間花費則體現在它的每一個元素都需要消耗相當的空間
可以這樣說:當操作是在一列數據的后面添加數據而不是在前面或中間,并且需要隨機地訪問其中的元素時,使用ArrayList會提供比較好的性能;當你的操作是在一列數據的前面或中間添加或刪除數據,并且按照順序訪問其中的元素時,就應該使用LinkedList了。
我們常說ArrayList是非線程安全的,Vector是線程安全的,說ArrayList的效率要高于Vector。
查看ArrayList和Vector的源碼,其實會發現Vector跟ArrayList的操作基本一樣,
只是把所有改變列表元素的方法和部分跟位置或變化有關系的查詢方法加上了synchronized的同步處理。所以我們可以這樣理解:1、如果List不會被多線程并發訪問,使用ArrayList就沒有問題,且效率更高。2、如果有多線程并發訪問List,可以使用Vector,也可以使用ArrayList,并且自己對可能出現并發沖突的地方自行做synchronized處理即可。
新聞熱點
疑難解答