作者:gggv123
鏈接:https://www.nowcoder.com/discuss/41112
來源:牛客網
---------------------------- --------- --------- ----------------------------------- ---------------------------------------------------------------
2.
ArrayList和LinkedList的大致區別如下:
1.ArrayList是實現了基於動態數組的數據結構,LinkedList基於鏈表的數據結構。
2.對於隨機訪問get和set,ArrayList覺得優於LinkedList,因為LinkedList要移動指針。
3.對於新增和刪除操作add和remove,LinedList比較占優勢,因為ArrayList要移動數據。
ArrayList和LinkedList底層實現原理
1.說一下 ArrayList 底層實現方式?
①ArrayList 通過數組實現,一旦我們實例化 ArrayList 無參數構造函數默認為數組初始化長度為 10②add 方法底層實現如果增加的元素個數超過了 10 個,那么 ArrayList 底層會新生成一個數組,長度為原數組的 1.5 倍+1,然后將原數組的內容復制到新數組當中,並且后續增加的內容都會放到新數組當中。當新數組無法容納增加的元素時,重復該過程。是一旦數組超出長度,就開始擴容數組。擴容數組調用的方法 Arrays.copyOf(objArr, objArr.length + 1);
2.說一下 LinkedList 底層實現方式?
LinkedList 底層的數據結構是基於雙向循環鏈表的,且頭結點中不存放數據,如下:

既然是雙向鏈表,那么必定存在一種數據結構——我們可以稱之為節點,節點實例保存業務數據,前一個節點的位置信息和后一個節點位置信息,如下圖所示:

。
https://blog.csdn.net/weixin_38422276/article/details/78978410
