數(shù)據(jù)結(jié)構(gòu)實現(xiàn):ArrayList 是動態(tài)數(shù)組的數(shù)據(jù)結(jié)構(gòu)實現(xiàn),而 LinkedList 是雙向鏈表的數(shù)據(jù)結(jié)構(gòu)實現(xiàn)。
隨機(jī)訪問效率:ArrayList 比 LinkedList 在隨機(jī)訪問的時候效率要高,因為 LinkedList 是線性的數(shù)據(jù)存儲方式,所以需要移動指針從前往后依次查找。
增加和刪除效率:在非首尾的增加和刪除操作,LinkedList 要比 ArrayList 效率要高,因為 ArrayList 增刪操作要影響數(shù)組內(nèi)的其他數(shù)據(jù)的下標(biāo)。
內(nèi)存空間占用:LinkedList 比 ArrayList 更占內(nèi)存,因為 LinkedList 的節(jié)點除了存儲數(shù)據(jù),還存儲了兩個引用,一個指向前一個元素,一個指向后一個元素。
線程安全:ArrayList 和 LinkedList 都是不同步的,也就是不保證線程安全;
綜合來說,在需要頻繁讀取集合中的元素時,更推薦使用 ArrayList,而在插入和刪除操作較多時,更推薦使用 LinkedList。
LinkedList 的雙向鏈表也叫雙鏈表,是鏈表的一種,它的每個數(shù)據(jù)結(jié)點中都有兩個指針,分別指向直接后繼和直接前驅(qū)。所以,從雙向鏈表中的任意一個結(jié)點開始,都可以很方便地訪問它的前驅(qū)結(jié)點和后繼結(jié)點。