'為什麼所有Java面試都會問到List、Set、Map?'

"

作者 | Java聖鬥士 | 原創圖文,轉載請註明出處

"

作者 | Java聖鬥士 | 原創圖文,轉載請註明出處

為什麼所有Java面試都會問到List、Set、Map?

Map:我不是集合,卻總要和List一起出現

“Map是不是集合?它和List有什麼區別?”

相信絕大多數Java程序員都見過上面這道面試題,可以說,Map和Collection下的List、Set這兩個接口已經成了util包中當之無愧的面試必考三劍客

"

作者 | Java聖鬥士 | 原創圖文,轉載請註明出處

為什麼所有Java面試都會問到List、Set、Map?

Map:我不是集合,卻總要和List一起出現

“Map是不是集合?它和List有什麼區別?”

相信絕大多數Java程序員都見過上面這道面試題,可以說,Map和Collection下的List、Set這兩個接口已經成了util包中當之無愧的面試必考三劍客

為什麼所有Java面試都會問到List、Set、Map?

不知從何時開始,Map這個本和Collection沒什麼交集的接口,成了程序之外的“Collection”家族的John Snow。

"

作者 | Java聖鬥士 | 原創圖文,轉載請註明出處

為什麼所有Java面試都會問到List、Set、Map?

Map:我不是集合,卻總要和List一起出現

“Map是不是集合?它和List有什麼區別?”

相信絕大多數Java程序員都見過上面這道面試題,可以說,Map和Collection下的List、Set這兩個接口已經成了util包中當之無愧的面試必考三劍客

為什麼所有Java面試都會問到List、Set、Map?

不知從何時開始,Map這個本和Collection沒什麼交集的接口,成了程序之外的“Collection”家族的John Snow。

為什麼所有Java面試都會問到List、Set、Map?

為什麼Map總是要和List等一起被問到?

似乎從來沒人思考過。就好像這個問題天生具有迷惑性,可以讓面試者猝不及防地將Map與集合混淆,從而漏出破綻!然後可以被面試官冷冷得諷刺一句:“哼!辣雞!”。

集合,這不是高中的知識嗎?

Java中的集合概念來源於數學,在高中的時候就已經學過:

“把一些能夠確定的不同的對象看成一個整體,就說這個整體是由這些對象的全體構成的集合。”

一個大括號,一些零零散散的元素就構成了一個集合:

{1, 3, 5, 7, 9}

集合中會有我們需要用到的元素,它們都是一個一個獨立的個體,不可分割。

Collection接口就是數學中這種多個元素的整體的一個抽象,從而衍生出允許元素重複List不能重複的Set

"

作者 | Java聖鬥士 | 原創圖文,轉載請註明出處

為什麼所有Java面試都會問到List、Set、Map?

Map:我不是集合,卻總要和List一起出現

“Map是不是集合?它和List有什麼區別?”

相信絕大多數Java程序員都見過上面這道面試題,可以說,Map和Collection下的List、Set這兩個接口已經成了util包中當之無愧的面試必考三劍客

為什麼所有Java面試都會問到List、Set、Map?

不知從何時開始,Map這個本和Collection沒什麼交集的接口,成了程序之外的“Collection”家族的John Snow。

為什麼所有Java面試都會問到List、Set、Map?

為什麼Map總是要和List等一起被問到?

似乎從來沒人思考過。就好像這個問題天生具有迷惑性,可以讓面試者猝不及防地將Map與集合混淆,從而漏出破綻!然後可以被面試官冷冷得諷刺一句:“哼!辣雞!”。

集合,這不是高中的知識嗎?

Java中的集合概念來源於數學,在高中的時候就已經學過:

“把一些能夠確定的不同的對象看成一個整體,就說這個整體是由這些對象的全體構成的集合。”

一個大括號,一些零零散散的元素就構成了一個集合:

{1, 3, 5, 7, 9}

集合中會有我們需要用到的元素,它們都是一個一個獨立的個體,不可分割。

Collection接口就是數學中這種多個元素的整體的一個抽象,從而衍生出允許元素重複List不能重複的Set

為什麼所有Java面試都會問到List、Set、Map?

而Map呢?雖然可以維護一對一對的 k-v映射,看似好像是一堆元素組織在了一起,但由於key和value本身就不存在什麼共同的特徵,因此和集合的概念還是有很大區別的。

面試造火箭,工作擰螺絲

好了,現在的面試官好像已經看出面試者漸漸變得聰明瞭,於是他們開始不那麼執著地問Map出身的問題了,他們希望更加刁難苦逼的求職者:

“請問Map的工作原理是怎樣的?”

“List的實現原理是怎樣的?”

“你在工作中有木有分析過Map和Set的共通之處?”

"

作者 | Java聖鬥士 | 原創圖文,轉載請註明出處

為什麼所有Java面試都會問到List、Set、Map?

Map:我不是集合,卻總要和List一起出現

“Map是不是集合?它和List有什麼區別?”

相信絕大多數Java程序員都見過上面這道面試題,可以說,Map和Collection下的List、Set這兩個接口已經成了util包中當之無愧的面試必考三劍客

為什麼所有Java面試都會問到List、Set、Map?

不知從何時開始,Map這個本和Collection沒什麼交集的接口,成了程序之外的“Collection”家族的John Snow。

為什麼所有Java面試都會問到List、Set、Map?

為什麼Map總是要和List等一起被問到?

似乎從來沒人思考過。就好像這個問題天生具有迷惑性,可以讓面試者猝不及防地將Map與集合混淆,從而漏出破綻!然後可以被面試官冷冷得諷刺一句:“哼!辣雞!”。

集合,這不是高中的知識嗎?

Java中的集合概念來源於數學,在高中的時候就已經學過:

“把一些能夠確定的不同的對象看成一個整體,就說這個整體是由這些對象的全體構成的集合。”

一個大括號,一些零零散散的元素就構成了一個集合:

{1, 3, 5, 7, 9}

集合中會有我們需要用到的元素,它們都是一個一個獨立的個體,不可分割。

Collection接口就是數學中這種多個元素的整體的一個抽象,從而衍生出允許元素重複List不能重複的Set

為什麼所有Java面試都會問到List、Set、Map?

而Map呢?雖然可以維護一對一對的 k-v映射,看似好像是一堆元素組織在了一起,但由於key和value本身就不存在什麼共同的特徵,因此和集合的概念還是有很大區別的。

面試造火箭,工作擰螺絲

好了,現在的面試官好像已經看出面試者漸漸變得聰明瞭,於是他們開始不那麼執著地問Map出身的問題了,他們希望更加刁難苦逼的求職者:

“請問Map的工作原理是怎樣的?”

“List的實現原理是怎樣的?”

“你在工作中有木有分析過Map和Set的共通之處?”

為什麼所有Java面試都會問到List、Set、Map?

小白表示,我在工作的時候用到的最多的就是list.add()和forEach呀!

面試造火箭,工作擰螺絲的戲碼在無數的Java求職過程中可謂比比皆是。很多就算是進了BAT等一線大廠依然只是默默地進行著重複性的機械工作,就好像流水線上擰螺絲的鉗工,可以隨時被取代。

那麼,為什麼這些容器接口如此重要,重要到就算工作中幾乎用不到解釋原理,面試官也要問出個一二三?

"

作者 | Java聖鬥士 | 原創圖文,轉載請註明出處

為什麼所有Java面試都會問到List、Set、Map?

Map:我不是集合,卻總要和List一起出現

“Map是不是集合?它和List有什麼區別?”

相信絕大多數Java程序員都見過上面這道面試題,可以說,Map和Collection下的List、Set這兩個接口已經成了util包中當之無愧的面試必考三劍客

為什麼所有Java面試都會問到List、Set、Map?

不知從何時開始,Map這個本和Collection沒什麼交集的接口,成了程序之外的“Collection”家族的John Snow。

為什麼所有Java面試都會問到List、Set、Map?

為什麼Map總是要和List等一起被問到?

似乎從來沒人思考過。就好像這個問題天生具有迷惑性,可以讓面試者猝不及防地將Map與集合混淆,從而漏出破綻!然後可以被面試官冷冷得諷刺一句:“哼!辣雞!”。

集合,這不是高中的知識嗎?

Java中的集合概念來源於數學,在高中的時候就已經學過:

“把一些能夠確定的不同的對象看成一個整體,就說這個整體是由這些對象的全體構成的集合。”

一個大括號,一些零零散散的元素就構成了一個集合:

{1, 3, 5, 7, 9}

集合中會有我們需要用到的元素,它們都是一個一個獨立的個體,不可分割。

Collection接口就是數學中這種多個元素的整體的一個抽象,從而衍生出允許元素重複List不能重複的Set

為什麼所有Java面試都會問到List、Set、Map?

而Map呢?雖然可以維護一對一對的 k-v映射,看似好像是一堆元素組織在了一起,但由於key和value本身就不存在什麼共同的特徵,因此和集合的概念還是有很大區別的。

面試造火箭,工作擰螺絲

好了,現在的面試官好像已經看出面試者漸漸變得聰明瞭,於是他們開始不那麼執著地問Map出身的問題了,他們希望更加刁難苦逼的求職者:

“請問Map的工作原理是怎樣的?”

“List的實現原理是怎樣的?”

“你在工作中有木有分析過Map和Set的共通之處?”

為什麼所有Java面試都會問到List、Set、Map?

小白表示,我在工作的時候用到的最多的就是list.add()和forEach呀!

面試造火箭,工作擰螺絲的戲碼在無數的Java求職過程中可謂比比皆是。很多就算是進了BAT等一線大廠依然只是默默地進行著重複性的機械工作,就好像流水線上擰螺絲的鉗工,可以隨時被取代。

那麼,為什麼這些容器接口如此重要,重要到就算工作中幾乎用不到解釋原理,面試官也要問出個一二三?

為什麼所有Java面試都會問到List、Set、Map?

很多寫業務的程序員,和這些小白們一樣,用的最多的就是add 和 for循環,彷彿所有的集合都可以通過這些簡單的幾個方法就能搞定所有的業務場景。

數組、表、紅黑樹、哈希,這些實現層的重要概念是計算機相關領域最最重要的知識內容——數據結構與算法。

為什麼List、Set、Map被這麼多的面試問到,就是因為它們考驗了一個程序員對一些計算機相關知識的綜合掌握程度,甚至可以洞悉一個求職者的知識參悟性。換句話說,“一千個哈姆雷特,可以出自一千個讀者”,層次的不同對源碼的解讀也會不盡相同,工資也會有所不同。

"

作者 | Java聖鬥士 | 原創圖文,轉載請註明出處

為什麼所有Java面試都會問到List、Set、Map?

Map:我不是集合,卻總要和List一起出現

“Map是不是集合?它和List有什麼區別?”

相信絕大多數Java程序員都見過上面這道面試題,可以說,Map和Collection下的List、Set這兩個接口已經成了util包中當之無愧的面試必考三劍客

為什麼所有Java面試都會問到List、Set、Map?

不知從何時開始,Map這個本和Collection沒什麼交集的接口,成了程序之外的“Collection”家族的John Snow。

為什麼所有Java面試都會問到List、Set、Map?

為什麼Map總是要和List等一起被問到?

似乎從來沒人思考過。就好像這個問題天生具有迷惑性,可以讓面試者猝不及防地將Map與集合混淆,從而漏出破綻!然後可以被面試官冷冷得諷刺一句:“哼!辣雞!”。

集合,這不是高中的知識嗎?

Java中的集合概念來源於數學,在高中的時候就已經學過:

“把一些能夠確定的不同的對象看成一個整體,就說這個整體是由這些對象的全體構成的集合。”

一個大括號,一些零零散散的元素就構成了一個集合:

{1, 3, 5, 7, 9}

集合中會有我們需要用到的元素,它們都是一個一個獨立的個體,不可分割。

Collection接口就是數學中這種多個元素的整體的一個抽象,從而衍生出允許元素重複List不能重複的Set

為什麼所有Java面試都會問到List、Set、Map?

而Map呢?雖然可以維護一對一對的 k-v映射,看似好像是一堆元素組織在了一起,但由於key和value本身就不存在什麼共同的特徵,因此和集合的概念還是有很大區別的。

面試造火箭,工作擰螺絲

好了,現在的面試官好像已經看出面試者漸漸變得聰明瞭,於是他們開始不那麼執著地問Map出身的問題了,他們希望更加刁難苦逼的求職者:

“請問Map的工作原理是怎樣的?”

“List的實現原理是怎樣的?”

“你在工作中有木有分析過Map和Set的共通之處?”

為什麼所有Java面試都會問到List、Set、Map?

小白表示,我在工作的時候用到的最多的就是list.add()和forEach呀!

面試造火箭,工作擰螺絲的戲碼在無數的Java求職過程中可謂比比皆是。很多就算是進了BAT等一線大廠依然只是默默地進行著重複性的機械工作,就好像流水線上擰螺絲的鉗工,可以隨時被取代。

那麼,為什麼這些容器接口如此重要,重要到就算工作中幾乎用不到解釋原理,面試官也要問出個一二三?

為什麼所有Java面試都會問到List、Set、Map?

很多寫業務的程序員,和這些小白們一樣,用的最多的就是add 和 for循環,彷彿所有的集合都可以通過這些簡單的幾個方法就能搞定所有的業務場景。

數組、表、紅黑樹、哈希,這些實現層的重要概念是計算機相關領域最最重要的知識內容——數據結構與算法。

為什麼List、Set、Map被這麼多的面試問到,就是因為它們考驗了一個程序員對一些計算機相關知識的綜合掌握程度,甚至可以洞悉一個求職者的知識參悟性。換句話說,“一千個哈姆雷特,可以出自一千個讀者”,層次的不同對源碼的解讀也會不盡相同,工資也會有所不同。

為什麼所有Java面試都會問到List、Set、Map?

這些重要的能力考量不僅可以體現一個程序員的技術水平,同時可以得知這些程序員理解業務的速度以及準確度,他們看待問題的角度以及一定的語言表達能力。

一個小小的HashMap,雖然用法簡單,但在特定的場景也會有不同的使用變化,比如擴容問題,比如併發問題,線程安全問題等等。延伸而得的無數小問題也是可以考察一名程序員的知識廣度和全面性。

所以,至今為止,三劍客都是面試環節JDK的一道重要主菜

"

作者 | Java聖鬥士 | 原創圖文,轉載請註明出處

為什麼所有Java面試都會問到List、Set、Map?

Map:我不是集合,卻總要和List一起出現

“Map是不是集合?它和List有什麼區別?”

相信絕大多數Java程序員都見過上面這道面試題,可以說,Map和Collection下的List、Set這兩個接口已經成了util包中當之無愧的面試必考三劍客

為什麼所有Java面試都會問到List、Set、Map?

不知從何時開始,Map這個本和Collection沒什麼交集的接口,成了程序之外的“Collection”家族的John Snow。

為什麼所有Java面試都會問到List、Set、Map?

為什麼Map總是要和List等一起被問到?

似乎從來沒人思考過。就好像這個問題天生具有迷惑性,可以讓面試者猝不及防地將Map與集合混淆,從而漏出破綻!然後可以被面試官冷冷得諷刺一句:“哼!辣雞!”。

集合,這不是高中的知識嗎?

Java中的集合概念來源於數學,在高中的時候就已經學過:

“把一些能夠確定的不同的對象看成一個整體,就說這個整體是由這些對象的全體構成的集合。”

一個大括號,一些零零散散的元素就構成了一個集合:

{1, 3, 5, 7, 9}

集合中會有我們需要用到的元素,它們都是一個一個獨立的個體,不可分割。

Collection接口就是數學中這種多個元素的整體的一個抽象,從而衍生出允許元素重複List不能重複的Set

為什麼所有Java面試都會問到List、Set、Map?

而Map呢?雖然可以維護一對一對的 k-v映射,看似好像是一堆元素組織在了一起,但由於key和value本身就不存在什麼共同的特徵,因此和集合的概念還是有很大區別的。

面試造火箭,工作擰螺絲

好了,現在的面試官好像已經看出面試者漸漸變得聰明瞭,於是他們開始不那麼執著地問Map出身的問題了,他們希望更加刁難苦逼的求職者:

“請問Map的工作原理是怎樣的?”

“List的實現原理是怎樣的?”

“你在工作中有木有分析過Map和Set的共通之處?”

為什麼所有Java面試都會問到List、Set、Map?

小白表示,我在工作的時候用到的最多的就是list.add()和forEach呀!

面試造火箭,工作擰螺絲的戲碼在無數的Java求職過程中可謂比比皆是。很多就算是進了BAT等一線大廠依然只是默默地進行著重複性的機械工作,就好像流水線上擰螺絲的鉗工,可以隨時被取代。

那麼,為什麼這些容器接口如此重要,重要到就算工作中幾乎用不到解釋原理,面試官也要問出個一二三?

為什麼所有Java面試都會問到List、Set、Map?

很多寫業務的程序員,和這些小白們一樣,用的最多的就是add 和 for循環,彷彿所有的集合都可以通過這些簡單的幾個方法就能搞定所有的業務場景。

數組、表、紅黑樹、哈希,這些實現層的重要概念是計算機相關領域最最重要的知識內容——數據結構與算法。

為什麼List、Set、Map被這麼多的面試問到,就是因為它們考驗了一個程序員對一些計算機相關知識的綜合掌握程度,甚至可以洞悉一個求職者的知識參悟性。換句話說,“一千個哈姆雷特,可以出自一千個讀者”,層次的不同對源碼的解讀也會不盡相同,工資也會有所不同。

為什麼所有Java面試都會問到List、Set、Map?

這些重要的能力考量不僅可以體現一個程序員的技術水平,同時可以得知這些程序員理解業務的速度以及準確度,他們看待問題的角度以及一定的語言表達能力。

一個小小的HashMap,雖然用法簡單,但在特定的場景也會有不同的使用變化,比如擴容問題,比如併發問題,線程安全問題等等。延伸而得的無數小問題也是可以考察一名程序員的知識廣度和全面性。

所以,至今為止,三劍客都是面試環節JDK的一道重要主菜

為什麼所有Java面試都會問到List、Set、Map?

隨著如今Java生態的越發成熟,很多優秀的框架噴湧而出,Spring、Spring Boot、JPA、Mybatis、Redis等等。這些解決各種Java應用場景的框架慢慢地加重了Java程序員的學習負擔,很多在實際工作中用不到的技術,但由於未來求職可能被問及,或者考慮到技能全面性等因素,大家都會去網上自學,也就間接造成了很多Java程序員對JDK本身研究和參悟的缺乏

雖然廣度得到了一定程度的延伸,但是隨著時間的推移,也會慢慢發現:深度,才是一個程序員真正應該加強的方向。

"

作者 | Java聖鬥士 | 原創圖文,轉載請註明出處

為什麼所有Java面試都會問到List、Set、Map?

Map:我不是集合,卻總要和List一起出現

“Map是不是集合?它和List有什麼區別?”

相信絕大多數Java程序員都見過上面這道面試題,可以說,Map和Collection下的List、Set這兩個接口已經成了util包中當之無愧的面試必考三劍客

為什麼所有Java面試都會問到List、Set、Map?

不知從何時開始,Map這個本和Collection沒什麼交集的接口,成了程序之外的“Collection”家族的John Snow。

為什麼所有Java面試都會問到List、Set、Map?

為什麼Map總是要和List等一起被問到?

似乎從來沒人思考過。就好像這個問題天生具有迷惑性,可以讓面試者猝不及防地將Map與集合混淆,從而漏出破綻!然後可以被面試官冷冷得諷刺一句:“哼!辣雞!”。

集合,這不是高中的知識嗎?

Java中的集合概念來源於數學,在高中的時候就已經學過:

“把一些能夠確定的不同的對象看成一個整體,就說這個整體是由這些對象的全體構成的集合。”

一個大括號,一些零零散散的元素就構成了一個集合:

{1, 3, 5, 7, 9}

集合中會有我們需要用到的元素,它們都是一個一個獨立的個體,不可分割。

Collection接口就是數學中這種多個元素的整體的一個抽象,從而衍生出允許元素重複List不能重複的Set

為什麼所有Java面試都會問到List、Set、Map?

而Map呢?雖然可以維護一對一對的 k-v映射,看似好像是一堆元素組織在了一起,但由於key和value本身就不存在什麼共同的特徵,因此和集合的概念還是有很大區別的。

面試造火箭,工作擰螺絲

好了,現在的面試官好像已經看出面試者漸漸變得聰明瞭,於是他們開始不那麼執著地問Map出身的問題了,他們希望更加刁難苦逼的求職者:

“請問Map的工作原理是怎樣的?”

“List的實現原理是怎樣的?”

“你在工作中有木有分析過Map和Set的共通之處?”

為什麼所有Java面試都會問到List、Set、Map?

小白表示,我在工作的時候用到的最多的就是list.add()和forEach呀!

面試造火箭,工作擰螺絲的戲碼在無數的Java求職過程中可謂比比皆是。很多就算是進了BAT等一線大廠依然只是默默地進行著重複性的機械工作,就好像流水線上擰螺絲的鉗工,可以隨時被取代。

那麼,為什麼這些容器接口如此重要,重要到就算工作中幾乎用不到解釋原理,面試官也要問出個一二三?

為什麼所有Java面試都會問到List、Set、Map?

很多寫業務的程序員,和這些小白們一樣,用的最多的就是add 和 for循環,彷彿所有的集合都可以通過這些簡單的幾個方法就能搞定所有的業務場景。

數組、表、紅黑樹、哈希,這些實現層的重要概念是計算機相關領域最最重要的知識內容——數據結構與算法。

為什麼List、Set、Map被這麼多的面試問到,就是因為它們考驗了一個程序員對一些計算機相關知識的綜合掌握程度,甚至可以洞悉一個求職者的知識參悟性。換句話說,“一千個哈姆雷特,可以出自一千個讀者”,層次的不同對源碼的解讀也會不盡相同,工資也會有所不同。

為什麼所有Java面試都會問到List、Set、Map?

這些重要的能力考量不僅可以體現一個程序員的技術水平,同時可以得知這些程序員理解業務的速度以及準確度,他們看待問題的角度以及一定的語言表達能力。

一個小小的HashMap,雖然用法簡單,但在特定的場景也會有不同的使用變化,比如擴容問題,比如併發問題,線程安全問題等等。延伸而得的無數小問題也是可以考察一名程序員的知識廣度和全面性。

所以,至今為止,三劍客都是面試環節JDK的一道重要主菜

為什麼所有Java面試都會問到List、Set、Map?

隨著如今Java生態的越發成熟,很多優秀的框架噴湧而出,Spring、Spring Boot、JPA、Mybatis、Redis等等。這些解決各種Java應用場景的框架慢慢地加重了Java程序員的學習負擔,很多在實際工作中用不到的技術,但由於未來求職可能被問及,或者考慮到技能全面性等因素,大家都會去網上自學,也就間接造成了很多Java程序員對JDK本身研究和參悟的缺乏

雖然廣度得到了一定程度的延伸,但是隨著時間的推移,也會慢慢發現:深度,才是一個程序員真正應該加強的方向。

為什麼所有Java面試都會問到List、Set、Map?

曾經在CSDN博客上看到有一篇阿里大佬的技術經分享,在談到如何學好Java的時候,他果斷地寫到:玩好JDK。

因為在JDK中,有太多好的思想和設計,不僅僅是List、Map等,甚至是一些設計模式也都包含在JDK的接口中。

那麼我們說活學活用和觸類旁通,在很多其他的框架源碼中,可能也會看到同樣的使用方式,不過是換了一個葫蘆而已。

因此,不論是List、Set、Map這些高頻容器面試題,還是其他各種經典實現原理,我們都應該做到認真對待,學好學透。

因為深度,才是一個Java程序員的不滅價值。

往期精彩:

大話Java 8 Lambda 表達式(一)

對話式情景剖析,String被final修飾的真正原因!一篇足矣

能否成為架構師?抽象工廠模式,真正考驗你抽象能力的時候到了

如何做到基礎紮實?大牛說:玩好JDK

束縛程序員工資的,從來不是什麼算法和設計模式

關注Java聖鬥士,犀利的程序員IT視角,帶你洞悉Java面試內幕,Java技術分享以及IT業內要聞,領略不一樣的技術風景線。

"

相關推薦

推薦中...