大家好,我是你們的老朋友青戈,知道你們想我了,所以我又來了?
Java的資料結構是面試考察的重點,只要參與過Java面試的同學相信都有所體會。面試官問這類問題的時候往往是想檢視你是否研究過Java中常用資料類型的底層結構,而不是只是簡單的停留在"會使用"的層次。那麼在面試的過程中我們要如何把這個問題說好,讓面試官滿意呢?
本期我將針對Java高頻考點ArrayList和LinkedList
的原理進行分析,希望能幫助你。
ArrayList
底層是一個Object類型的數組,初始容量是10,支援動態擴容,擴容後的容量是目前容量的1.5倍,它的最大容量是Integer.MAX_VALUE - 8(但是仍可以擴容到Integer.MAX_VALUE),對於空出的8位,目前的解釋是避免一些機器記憶體溢出,減少出錯幾率
。
LinkedList
底層是雙向鍊錶,初始容量是0,擴容只需新建節點進行指標指向即可。
為了簡化成口頭可表述的語言,方便同學們在面試的時候向面試官解釋,我這裡就不貼源碼輔助說明了,有興趣的同學可以自己翻源碼看看內部的構造和方法,加深對這塊的理解。
插入
刪除
記憶體空間
擴充機制
執行緒安全性
#ArrayList和LinkedList都是線程不安全的,多線程環境下容易造成髒讀的問題,可以使用Collections.synchronizedList()
方法保證線程的安全性
#儲存特點
儲存的元素都是有順序的,都是可以重複的,新增元素都是儲存到List的結尾處。
以上是幾乎所有Java面試都會問到的問題:說ArrayList和LinkedList的差別的詳細內容。更多資訊請關注PHP中文網其他相關文章!