日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > java >内容正文

java

Java基础 ArrayList和LinkedList的区别和实现原理

發(fā)布時間:2025/3/19 java 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java基础 ArrayList和LinkedList的区别和实现原理 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

????????ArrayList?和 LinkedList都是List的實現(xiàn)類,List集合主要有兩個特點:1、有序;2、可重復(fù)。所以他們兩個肯定也有其特征。

????????下面分別介紹下二者:

?1、ArrayList---?數(shù)組列表

?

????上圖是ArrayList的源碼,可以看出Java在構(gòu)建ArrayList的時候是默認(rèn)初始容量為10的空列表,底層使用數(shù)組保存所有元素。

? 從他的構(gòu)造器可以看出有三種方式的構(gòu)造器:

?????????????????????????????1、構(gòu)造一個默認(rèn)初始容量為10的(這里是初始容量,而不是size());

?????????????????????????????2、構(gòu)造一個指定初始容量的空列表。

?????????????????????????????3、構(gòu)造一個包含指定集合的元素列表,

????????????????? ? 這里的容量是指在jvm堆內(nèi)存中開辟的空間。

? ??? ? 下圖是源碼中我們最常用的ArrayList的get(),set(),add(),remove();(增刪改查)的方法,可以看出都是對數(shù)組進(jìn)行操作。所以ArrayList具有數(shù)組的優(yōu)缺點就是,有利于查找修改快,而增加和刪除相對慢一些。例如,當(dāng)增加或刪除某一位時,需要移動大量元素。


2、LinkedList--鏈表列表

? 老套路,直接先上源碼:? ?

????源碼上我們能清晰的看到LinkedList同樣實現(xiàn)了List并且還實現(xiàn)了deque(隊列),即循環(huán)雙向鏈表的數(shù)據(jù)結(jié)構(gòu)。

????????????? ? 其結(jié)構(gòu)是有一些列鏈表拼接而成,主要前后節(jié)點,和大小。并且它在初始化后默認(rèn)是空。

? ? 下圖是LinkedList常用的增刪改查的方法(只列舉了一部分),可以看到是典型鏈表的方式,查找某一節(jié)點,在設(shè)置對應(yīng)節(jié)點的值。如果進(jìn)行增刪操作只需找到對應(yīng)節(jié)點更改里面內(nèi)容,當(dāng)進(jìn)行遍歷訪問時,如果用for(隨機(jī)訪問遍歷)總會進(jìn)行一次列表的遍歷操作,遍歷每個的前后節(jié)點移動指針,所以性能很低。


總結(jié)?區(qū)別:

????? ? 1、二者實現(xiàn)結(jié)構(gòu)不同arraylist是基于數(shù)組,linkedlist是基于鏈表,他們的特性也是由其數(shù)據(jù)結(jié)構(gòu)決定的。

????? ? 2、隨機(jī)遍歷訪問時linkedlist的性能要低于arraylist.

????? ? 3、arraylist的初始化時默認(rèn)10容量,而linkedlist默認(rèn)初始化為空。

????? ? 4、linkedlist的增刪要優(yōu)于arraylist

總結(jié)

以上是生活随笔為你收集整理的Java基础 ArrayList和LinkedList的区别和实现原理的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。