?
ArrayList和LinkedList的異同
二者的線程都不安全,相對線程安全的Vector,執(zhí)行效率高。此外,ArrayList時實現(xiàn)了基于動態(tài)數(shù)組的數(shù)據(jù)結(jié)構(gòu),LinkedList基于鏈表的數(shù)據(jù)結(jié)構(gòu),對于隨機訪問get和set,ArrayList覺得優(yōu)于LinkedList比較占優(yōu)勢,因為LinledList要移動指針。對于新增和刪除操作add(特指插入)和remove,LinkedList比較占優(yōu)勢,因為ArrayList要移動數(shù)據(jù)。
ArrayList和Vector的區(qū)別
Vector和ArrayList幾乎是完全相同的,唯一的區(qū)別在于Vector是同步類(synchronized),屬于強同步類,因為開銷就比ArrayList要大,訪問要慢。正常情況下,大多數(shù)的java程序員使用ArrayList而不是Vector,因為同步完全可以由程序員自己來控制。Vector每次擴容請求其大小的2倍空間,而ArrayList是1.5倍。
?
ArrayList的源碼分析
結(jié)論:建議開發(fā)中使用帶參的構(gòu)造器:ArrayList list=new ArrayList(int capacity)
Jdk8中ArrayList的變化
LinkedList的源碼分析
數(shù)據(jù)結(jié)構(gòu)實現(xiàn): ArrayList 是動態(tài)數(shù)組的數(shù)據(jù)結(jié)構(gòu)實現(xiàn),而 LinkedList 是雙向鏈表的數(shù)據(jù)結(jié)構(gòu)實
現(xiàn)。
隨機訪問效率: ArrayList 比 LinkedList 在隨機訪問的時候效率要高,因為 LinkedList 是線性的數(shù)
據(jù)存儲方式,所以需要移動指針從前往后依次查找。
增加和刪除效率:在非首尾的增加和刪除操作, LinkedList 要比 ArrayList 效率要高,因為
ArrayList 增刪操作要影響數(shù)組內(nèi)的其他數(shù)據(jù)的下標(biāo)。
內(nèi)存空間占用: LinkedList 比 ArrayList 更占內(nèi)存,因為 LinkedList 的節(jié)點除了存儲數(shù)據(jù),還存儲
了兩個引用,一個指向前一個元素,一個指向后一個元素。
線程安全: ArrayList 和 LinkedList 都是不同步的,也就是不保證線程安全;
綜合來說,在需要頻繁讀取集合中的元素時,更推薦使用 ArrayList ,而在插入和刪除操作較多
時,更推薦使用 LinkedList 。
LinkedList 的雙向鏈表也叫雙鏈表,是鏈表的一種,它的每個數(shù)據(jù)結(jié)點中都有兩個指針,分別指向
直接后繼和直接前驅(qū)。所以,從雙向鏈表中的任意一個結(jié)點開始,都可以很方便地訪問它的前驅(qū)結(jié)
點和后繼結(jié)點。
?
知識來源:
【基礎(chǔ)】ArrayList和LinkedList區(qū)別_嗶哩嗶哩_bilibili
【2023年面試】ArrayList和LinkedList有什么區(qū)別_嗶哩嗶哩_bilibili
Java中的集合框架_java集合框架_汝甚騷吾不及的博客-CSDN博客文章來源:http://www.zghlxwxcb.cn/news/detail-666186.html
JAVA集合面試題52道_秋楓要學(xué)習(xí)的博客-CSDN博客文章來源地址http://www.zghlxwxcb.cn/news/detail-666186.html
到了這里,關(guān)于java八股文面試[數(shù)據(jù)結(jié)構(gòu)]——ArrayList和LinkedList區(qū)別的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!