一、什么是數(shù)組?什么是鏈表?
(相關(guān)面試題推薦:java面試題)
數(shù)組就像身上編了號站成一排的人,要找第10個人很容易,根據(jù)人身上的編號很快就能找到。但插入、刪除慢,要望某個位置插入或刪除一個人時,后面的人身上的編號都要變。當(dāng)然,加入或刪除的人始終末尾的也快。
鏈表是一種上一個元素的引用指向下一個元素的存儲結(jié)構(gòu),鏈表通過指針來連接元素與元素;
鏈表就像手牽著手站成一圈的人,要找第10個人不容易,必須從第一個人一個個數(shù)過去。但插入、刪除快。插入時只要解開兩個人的手,并重新牽上新加進(jìn)來的人的手就可以。刪除一樣的道理。
Java中,ArrayList、LinkedList就是分別用數(shù)組和鏈表做內(nèi)部實現(xiàn)的。
二、數(shù)組和鏈表有什么區(qū)別
不同:鏈表是鏈?zhǔn)降拇鎯Y(jié)構(gòu);數(shù)組是順序的存儲結(jié)構(gòu)。
鏈表通過指針來連接元素與元素,數(shù)組則是把所有元素按次序依次存儲。
(相關(guān)教程推薦:java入門教程)
鏈表的插入刪除元素相對數(shù)組較為簡單,不需要移動元素,且較為容易實現(xiàn)長度擴(kuò)充,但是尋找某個元素較為困難;
數(shù)組尋找某個元素較為簡單,但插入與刪除比較復(fù)雜,由于最大長度需要再編程一開始時指定,故當(dāng)達(dá)到最大長度時,擴(kuò)充長度不如鏈表方便。
相同:兩種結(jié)構(gòu)均可實現(xiàn)數(shù)據(jù)的順序存儲,構(gòu)造出來的模型呈線性結(jié)構(gòu)。
三、java集合和數(shù)組的特點
數(shù)組特點:大小固定,只能存儲相同數(shù)據(jù)類型的數(shù)據(jù)
集合特點:大小可動態(tài)擴(kuò)展,可以存儲各種類型的數(shù)據(jù)
(相關(guān)視頻教程推薦:java視頻教程)
四、LinkedList底層實現(xiàn)方式
LinkedList是通過雙向鏈表去實現(xiàn)的,既然是鏈表實現(xiàn)那么它的隨機(jī)訪問效率比ArrayList要低,順序訪問的效率要比較的高。每個節(jié)點都有一個前驅(qū)(之前前面節(jié)點的指針)和一個后繼(指向后面節(jié)點的指針),效果如下圖:
1、使用for適合循環(huán)ArrayLIst以及數(shù)組,當(dāng)大批量的循環(huán)LinkedList時程序?qū)ㄋ溃琭or適合循環(huán)數(shù)組結(jié)構(gòu),通過下標(biāo)去遍歷。
2、使用foreach適合循環(huán)LinkedList,使用雙鏈表結(jié)構(gòu)實現(xiàn)的應(yīng)當(dāng)使用foreach循環(huán)。