![java面試之Arraylist和Linkedlist的區別](https://img.php.cn/upload/article/202012/24/2020122410043078215.jpg)
我們先來介紹下Arraylist的知識:
(學習影片分享:java教學影片)
Arraylist:底層是基於動態數組,根據下表隨機存取數組元素的效率高,向數組尾部添加元素的效率高;
但是,刪除數組中的資料以及向數組中間添加資料效率低,因為需要移動數組。例如最壞的情況是刪除第一個數組元素,則需要將第2至第n個數組元素各向前移動一位。而之所以稱為動態數組,是因為Arraylist在數組元素超過其容量大,Arraylist可以進行擴容(針對JDK1.8 數組擴容後的容量是擴容前的1.5倍),Arraylist源碼中最大的數組容量是Integer .MAX_VALUE-8,對於空出的8位,目前解釋是:
①儲存Headerwords;
②避免一些機器記憶體溢出,減少出錯幾率,所以少分配;
③最大還是能支援到Integer.MAX_VALUE(當Integer.MAX_VALUE-8依舊無法滿足需求時)。
以下是Arraylist部分原始碼:Arraylist擴容:
![1608775577762702.png java面試之Arraylist和Linkedlist的區別](https://img.php.cn/upload/image/317/239/350/1608775577762702.png)
(更多面試題分享:java面試題目及答案)
Arraylist新增資料:(向陣列尾部新增)
![1608775617474226.png java面試之Arraylist和Linkedlist的區別](https://img.php.cn/upload/image/320/745/189/1608775617474226.png)
# 新增陣列給陣列的指定位置:
![1608775635980724.png java面試之Arraylist和Linkedlist的區別](https://img.php.cn/upload/image/895/497/373/1608775635980724.png)
![1608775662961827.png java面試之Arraylist和Linkedlist的區別](https://img.php.cn/upload/image/500/635/172/1608775662961827.png)
![1608775680203191.png java面試之Arraylist和Linkedlist的區別](https://img.php.cn/upload/image/457/545/428/1608775680203191.png)
![1608775690132351.png java面試之Arraylist和Linkedlist的區別](https://img.php.cn/upload/image/161/410/473/1608775690132351.png)
![1608775718723999.png java面試之Arraylist和Linkedlist的區別](https://img.php.cn/upload/image/690/437/670/1608775718723999.png)
######################################################### ###可以看到,只要ArrayList的當前容足夠大,add()操作向數組的尾部的效率非常高的,當向數組指定位置添加資料時,會進行大量的數組移動複製操作。而陣列複製時,最終會呼叫System.arraycopy()方法,因此add()操作的效率還是相當高的。儘管這樣當新增資料至指定位置時還是比Linkedlist慢,後者新增資料只需要改變指標指向即可。 Arraylist刪除數組也需要移動數組,效率較慢。 ######Linkedlist基於鍊錶的動態數組,資料添加刪除效率高,只需要改變指標指向即可,但是存取資料的平均效率低,需要對鍊錶進行遍歷。 Arraylist get資料的原始碼:(根據下標訪問,效率高)###############Linkedlist存取資料的原始碼:(node()函數遍歷鍊錶)###### ##################總結:######1、對於隨機存取get和set,ArrayList優於LinkedList,因為LinkedList要移動指標。 ######對於新增和刪除操作add和remove,LinedList比較佔優勢,因為ArrayList要移動資料。 ###### 2、各自效率問題:################相關建議:###java入門教學###############java入門教學課程######
以上是java面試之Arraylist和Linkedlist的區別的詳細內容。更多資訊請關注PHP中文網其他相關文章!