List 是工作中最常用的集合類型之一,面試的時候,大傢也會被問到各種各樣的問題,但是一般大多數情況下,隻要你看瞭解過List集合源碼,對List集合總結結構和源碼有所瞭解的話,一般都問題不大。
很多面試官非常喜歡問這樣的問題,主要考察同學們平時工作學習過程中有沒有深入思考,經常性的總結.關於ArrayList集合起始內容還是比較多的,建議大傢先回答ArrayList的總體的結構,再找個自己很熟悉的理解很深入的細節作為入口,誇誇其談,就ok瞭.
比如:
ArrayList 底層數據結構是個數組,而數組有索引,內存元素存儲空間是連續的。所以查詢速度快,增刪速度較慢。內部實現瞭對數組操作過程的封裝,然後舉個添加元素add方法,詳細闡述
一般情況下面試官感覺你說的很有邏輯,某個具體的點講解又很輸入,就不會再深究瞭。
談一下你是如何理解LinkedList集合 的也是同樣套路。
答:此處數組的大小是 1,下一次擴容前最大可用大小是 10,因為 ArrayList 第一次擴容時,是有默認值的,默認值是 10,在第一次 add 一個值進去時,數組的可用大小被擴容到 10 瞭。
答:這裡的考查點就是擴容的公式,當增加到 11 的時候,此時我們希望數組的大小為 11,但實際上數組的最大容量隻有 10,不夠瞭就需要擴容,擴容的公式是:oldCapacity + (oldCapacity>> 1),oldCapacity 表示數組現有大小,目前場景計算公式是:10 + 10 /2 = 15,然後我們發現 15 已經夠用瞭,所以數組的大小會被擴容到 15。
答:第一題中我們已經計算出來數組在加入一個值後,實際大小是 1,最大可用大小是 10 ,現在需要一下子加入 15 個值,那我們期望數組的大小值就是 16,此時數組最大可用大小隻有 10,明顯不夠,需要擴容,擴容後的大小是:10 + 10 /2 = 15,這時候發現擴容後的大小仍然不到我們期望的值 16,這時候源碼中有一種策略如下:
// newCapacity 本次擴容的大小,minCapacity 我們期望的數組最小大小
// 如果擴容後的值 < 我們的期望值,我們的期望值就等於本次擴容的大小
if (newCapacity - minCapacity < 0)
newCapacity = minCapacity;
前往理由 (Reason to go):1. 死亡谷國傢公園是除阿拉斯加外最大的國傢公園,幾近深不可測。公園占地面積 330萬英畝/134萬公...