25.ArrayList 和 LinkedList 的區別是什么? linklist與arraylist的區別



文章插圖
25.ArrayList 和 LinkedList 的區別是什么? linklist與arraylist的區別

文章插圖
【25.ArrayList 和 LinkedList 的區別是什么? linklist與arraylist的區別】首先,底層數據結構不同
ArrayList底層基于數組實現,連續內存存儲,需要預先申請分配一段連續的內存空間(創建數組對象),適合下標訪問(隨機訪問),需要創建多大的數組不好確定,如果數組長度過大,會造成內存空間浪費的問題,如果數組長度過小,當數組已滿時想要添加新的元素,就需要創建一個新的數組,新的數組長度是舊數組的1.5倍,并把數據從舊數組復制到新數組中,然后才能添加新的元素 。創建新的數組、舊數組數據復制到新數組,都是比較重量級的操作 。另外,如果不是在尾部插入、刪除數據還會涉及到元素的移動,使用尾插法并指定初始容量可以極大提高性能,甚至超過LinkedList,因為LinkedList需要創建大量的node對象 。
LinkedList底層基于雙向鏈表實現,元素可以儲存在分散的內存中,適合做數據插入操作及刪除操作,不適合隨機查詢,需要逐一遍歷 。
其次,ArrayList和LinkedList都實現了List接口,但是LinkedList還額外地實現了Deque接口,所以LinkedList還可以當作隊列來用,利用雙向鏈表和隊列的特性,還是可以當作棧來使用 。