面試題:連結串列為什麼使用內部類實現?
點選上方“業餘草”,選擇“置頂公眾號”
第一時間獲取技術乾貨和業界資訊!
最近推廣了一個關於面試的活動。我看了一下章節,其中有一個面試題是說什麼是內部類?內部類的特點是什麼?
看到這個題,我突然想到,工作這麼多年,對內部類的關注一直都比較少。於是,在一次面試的機會中,我問了一個號稱有 10 年工作經驗的程式設計師:“連結串列為什麼使用內部類實現?”
他支支吾吾,半天沒有解釋清楚為什麼?於是,我百度搜尋了很久,只發現阿里雲上有一個免費的課程提到了“連結串列為什麼使用內部類實現?”
但是這個解釋非常的短,也非常的含蓄。所以,本文就根據我自己的工作經驗來說說,連結串列為什麼使用內部類實現?
說實話,Java 中使用連結串列的地方還是蠻多的,但是為什麼不把連結串列單獨抽取出來作為一個類,使用的地方組合或者繼承一下呢?
要解釋這個問題,我們先來看一看內部類的特點。
第一個特點,內部類可以訪問其所在類的私有屬性和方法。這一點就很像孕媽媽肚裡的小寶寶一樣,可以很方便的吸收一些媽媽的營養。以 HashMap 為例,它裡面有好幾個內部類。觀察這幾個內部類你會發現有一個共同特點就是內部類可以很方便的訪問所在外部類的一些私有屬性和方法。如果你把連結串列給抽取出來,你會發現,最終的連結串列實現起來難了很多。
第二個特點,內部類可以隱藏起來,不被同一個包中的其他類訪問,如果一個類只對某個類提供使用,那麼可以將其定義為內部類。這個特點在 HashMap 等集合中也有體現,具體來說就是各個內部類都是輔助所在的外部類的。作為外部類的一部分,具有強關聯性。並且不希望除了所屬的外部類使用外的其他類進行訪問。
第三個特點,可以聯合外部類解決多繼承問題。這也是我認為非常重要的一個特點。還是以 HashMap 為例,它本身繼承了 AbstractMap。但是它的所有內部類,都又有了各自的繼承。
關於連結串列為什麼使用內部類實現?我就通過以上 3 點來解釋。其中最重要的我認為是第 3 點。以上,希望能夠幫助到大家,如果有更好的觀點,請公眾號裡留言評論,謝謝!
10T技術資源大放送!包括但不限於:C/C++,Linux,Python,Java,PHP,人工智慧,GO等等。在公眾號內回覆對應關鍵字或框架名字,即可免費獲取!!
你再主動一點點 我們就有故事了
相關文章
- 【圖解連結串列類面試題】移除連結串列元素圖解面試題
- 【圖解連結串列類面試題】環形連結串列圖解面試題
- java內部類,為什麼需要內部類?Java
- 連結串列面試題(二)---連結串列逆序(連結串列反轉)面試題
- 連結串列專題——面試中常見的連結串列問題面試
- 連結串列-單連結串列實現
- 模擬STL連結串列類的實現
- 【LeetCode-連結串列】面試題-反轉連結串列LeetCode面試題
- 連結串列面試題(七)---合併兩個有序連結串列面試題
- 面試題 SDWebImage內部實現過程面試題Web
- 面試官:Redis中字串的內部實現方式是什麼?面試Redis字串
- 面試官:Redis中列表的內部實現方式是什麼?面試Redis
- PHP 使用連結串列實現對映PHP
- DS單連結串列--類實現(未完成)
- 單連結串列實現
- 連結串列面試題(九)---判斷一個連結串列是否帶環面試題
- 連結串列面試題(四)---查詢連結串列的中間節點面試題
- 為什麼Oracle要搞出兩個髒連結串列Oracle
- 面試官:Redis中有序集合的內部實現方式是什麼?面試Redis
- 連結串列以及golang介入式連結串列的實現Golang
- Linux核心連結串列-通用連結串列的實現Linux
- 搞懂單連結串列常見面試題面試題
- 連結串列面試題(八)---約瑟夫環面試題
- 為什麼現在連Date類都不建議使用了?
- 連結串列面試題(十一)---求帶環單連結串列 環的入口點面試題
- 連結串列面試題(六)---刪除單連結串列倒數第k個結點面試題
- FreeRTOS連結串列實現
- 實現雙向連結串列
- C#實現連結串列C#
- 022 通過連結串列學Rust之為什麼要非安全的單連結串列Rust
- 022 透過連結串列學Rust之為什麼要非安全的單連結串列Rust
- 為什麼陣列查詢比連結串列要快?而插入刪除比連結串列效率低陣列
- javascript中使用迴圈連結串列實現約瑟夫環問題JavaScript
- 如何以及為什麼React Fiber使用連結串列遍歷元件樹React元件
- 連結串列面試題(十)---求帶環單連結串列的環的長度面試題
- (連結串列)連結串列的排序問題排序
- 連結串列面試題(十三)---求兩個都不帶環的連結串列相交的結點面試題
- 連結串列面試題(十二)---判斷兩個都不帶環的連結串列是否相交面試題