Java基础 ArrayList和LinkedList的区别和实现原理
????????ArrayList?和 LinkedList都是List的實現類,List集合主要有兩個特點:1、有序;2、可重復。所以他們兩個肯定也有其特征。
????????下面分別介紹下二者:
?1、ArrayList---?數組列表
?
????上圖是ArrayList的源碼,可以看出Java在構建ArrayList的時候是默認初始容量為10的空列表,底層使用數組保存所有元素。
? 從他的構造器可以看出有三種方式的構造器:
?????????????????????????????1、構造一個默認初始容量為10的(這里是初始容量,而不是size());
?????????????????????????????2、構造一個指定初始容量的空列表。
?????????????????????????????3、構造一個包含指定集合的元素列表,
????????????????? ? 這里的容量是指在jvm堆內存中開辟的空間。
? ??? ? 下圖是源碼中我們最常用的ArrayList的get(),set(),add(),remove();(增刪改查)的方法,可以看出都是對數組進行操作。所以ArrayList具有數組的優缺點就是,有利于查找修改快,而增加和刪除相對慢一些。例如,當增加或刪除某一位時,需要移動大量元素。
2、LinkedList--鏈表列表
? 老套路,直接先上源碼:? ?
????源碼上我們能清晰的看到LinkedList同樣實現了List并且還實現了deque(隊列),即循環雙向鏈表的數據結構。
????????????? ? 其結構是有一些列鏈表拼接而成,主要前后節點,和大小。并且它在初始化后默認是空。
? ? 下圖是LinkedList常用的增刪改查的方法(只列舉了一部分),可以看到是典型鏈表的方式,查找某一節點,在設置對應節點的值。如果進行增刪操作只需找到對應節點更改里面內容,當進行遍歷訪問時,如果用for(隨機訪問遍歷)總會進行一次列表的遍歷操作,遍歷每個的前后節點移動指針,所以性能很低。
總結?區別:
????? ? 1、二者實現結構不同arraylist是基于數組,linkedlist是基于鏈表,他們的特性也是由其數據結構決定的。
????? ? 2、隨機遍歷訪問時linkedlist的性能要低于arraylist.
????? ? 3、arraylist的初始化時默認10容量,而linkedlist默認初始化為空。
????? ? 4、linkedlist的增刪要優于arraylist
總結
以上是生活随笔為你收集整理的Java基础 ArrayList和LinkedList的区别和实现原理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql常用查询命令
- 下一篇: Java基础 HashMap实现原理及方