【Java核心面試寶典】Day2、談一談List接口的實現?
Hello,你好呀,我是灰小猿!一個超會寫bug的程序猿!
用堅持締造技術、用指尖敲動未來!
和很多小伙伴們一樣,我也是一名奔波在Java道路上的“創造者”。也想靠技術來改變未來,改變世界!因為我們堅信每一次敲動鍵盤都能讓生活變得更智能、世界變得更有趣!
在此專欄《Java核心面試寶典》記錄我們備戰夢想的【day 2】!
目錄
1、是否知道list接口的繼承關系?
2、常用哪些List的實現類?都有什么特征?
1、ArrayList
2、Vector
3、LinkedList
3、ArrayList和LinkedList對比
Hello,你好呀,我是灰小猿,一個超會寫bug的程序猿!
在Java的相關面試中,集合相關的內容問到的還是比較多的,一般都是List接口及常見實現,Map接口及常見實現和Set接口及常見實現,其中最經常問到的要數Map接口及其相關實現了,當然這并不代表其他兩個就不重要了,所以今天先和大家聊一下在面試中關于list集合的一些問題。
1、是否知道list接口的繼承關系?
關于list接口的繼承關系,一般這都是在考察我們對底層源碼的理解程度,那么我在這里給大家總結了一個list接口的繼承關系圖,從圖中我們可以很清楚的看到list接口從上及下的繼承過程,同時關于List接口和AbstractCollection類的上層接口Collection1的使用方法,大家可以看我的這篇文章“Java集合類之Collection接口,集合的“爸爸”接口了解一下?”
只有經常的閱讀相關的底層源碼,以至于在使用和提問到list接口的相關內容時,才能更好的掌握和應對。
2、常用哪些List的實現類?都有什么特征?
1、ArrayList
ArrayList的底層是動態數組,它具有的特點是查找快增刪慢,默認的初識容量是10,每次采用1.5倍的擴容。
2、Vector
Vector和ArrayList是一樣的,都是動態數組,具有和ArrayList一樣的特征,但是不同的就是Vector是支持線程同步的,這也就說明ArrayList是不支持線程同步的。
3、LinkedList
LinkedList是采用鏈表結構來存儲數據的,適用于動態的插入和刪除操作,但缺點就是隨機訪問或遍歷比較慢,是因為他需要從頭結點一個一個的查找。同時它實現了Deque接口,因此還具有隊列的特性。
3、ArrayList和LinkedList對比
為了能夠更加方便的理解和記憶ArrayList和LinkedList,在這里還給大家總結了一個表格。
ArrayList
LinkedList
線程安全
不是同步的,不保證線程安全
不是同步的,不保證線程安全
底層數據結構
Object數組
雙向鏈表(1.6之前是循環鏈表,1.7之后取消了循環)
支持隨機訪問
支持
不支持
插入效率
受插入位置的影響
不受插入位置影響
內存占用
ArrayList的空間浪費主要體現在list列表的結尾會預留一定的容量空間
LinkedList的空間花費主要體現在它的每一個元素都需要消耗比ArrayList更多的空間
以上是在list接口的相關問題中比較容易問到和考察的內容,其實關于list相關集合的使用,更多的還是要求對其底層源碼的理解程度和在實際操作過程中對合適集合類型的選擇。
感興趣的小伙伴可以訂閱專欄,
灰小猿陪你一起進步!
Java 數據結構
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。