Java原來還能夠這麼學:如何搞定面試中必考的集合類

副本_未命名.jpg

原創聲明

本文做者:黃小斜java

轉載請務必在文章開頭註明出處和做者。git

系列文章介紹

本文是《五分鐘學Java》系列文章的一篇程序員

本系列文章主要圍繞Java程序員必須掌握的核心技能,結合我我的三年多的Java學習和工做經歷,總結和沉澱下來的方法論,但願能讓Java學習這件事變得更簡單,做者目前在阿里作Java,忙裏偷閒分享一些技術文章github

系列文章將會把一些技術學習方法、過程、要領與個人學習經驗相結合,更加淺顯易懂,而且我也會把我學習時用的資料,書籍和文章拿出來分享給你們,節省你個人時間。所謂授人以魚也要授人以漁,是本系列文章但願達到的目標。面試

簡介

最近的你有沒有參加Java面試呢?你有沒有發現,Java面試中老是愛考一類問題,那就是集合類,爲何對集合類的考察會如此受歡迎呢,其實啊,主要是由於集合類的使用範圍實在是太廣了,不論是開發中,仍是框架源碼中,每每都會用到集合類。算法

像我們平時面試常常遇到的問題,好比hashmap、linkedlist,或者是阻塞隊列等集合類,每每都是我們工做中須要用到的一些工具。編程

根據百度百科的定義,集合類是Java數據結構的實現。Java的集合類是java.util包中的重要內容,它容許以各類方式將元素分組,並定義了各類使這些元素更容易操做的方法。Java集合類是Java將一些基本的和使用頻率極高的基礎類進行封裝和加強後再以一個類的形式提供。集合類是能夠往裏面保存多個對象的類,存放的是對象,不一樣的集合類有不一樣的功能和特色,適合不一樣的場合,用以解決一些實際問題。後端

能夠看出,集合類就是util包裏的一類工具,用好集合類,能幫忙咱們解決不少工做中的問題,而學好集合類,才能讓咱們在面試中無往而不利。api

爲何面試總愛問Java集合類

有Java面試經歷的朋友們都知道,Java面試最喜歡問的集合類問題就是:hashmap和hashtable的區別,linkedlist和arraylist的區別是什麼,稍微複雜一點的話,則可能會問:hashmap的初始容量是多少,它的擴容方式是什麼樣的,它的內部結構是什麼樣的。數組

諸如此類問題,深受廣大互聯網公司歡迎,固然,這些都是Java初級面試的問題,算是基礎中的基礎了。

爲何面試官老是喜歡問集合類呢,依我看來,有這麼幾個緣由:集合類裏是Java裏使用範圍最廣,使用頻率最高的api了,而且這玩意的通用性很強,不少框架都得使用,若是想要看懂框架源碼,那麼你就必需要掌握集合類的知識。

其次,集合類裏蘊藏了不少數據結構與算法的知識,正由於如此,若是你能正確地理解這些集合類,那麼想必你對於數據結構和算法的理解也差不到哪。

還有就是,Java集合類裏的不少源碼都是幾個Java創始人大牛寫的,代碼質量和風格都很是值得咱們學習,裏面用到的一些算法和解決問題的方法也很是值得效仿,而這些,都必需要經過學習集合類的源碼只是纔可以作到。

如何學習Java集合類

第一次接觸

第一次接觸集合類,想必你們的方式都差很少,應該就是用了一個叫作List的東西,以及它的子類ArrayList,經過它的api我基本上就能夠了解它有哪些功能了,無非就是增刪改查唄。

雖然這東西看起來沒有什麼難度,可是面試題裏可不會直接問你它的api有哪些,剛好一次面試,面試官就問了我ArrayList相關的問題:ArrayList的底層數據結構是什麼,它和linkedlist的區別是什麼,它的擴容方式是怎麼樣的,它是線程安全的麼,這些看起來很簡單的問題,我當時一個都回答不上來。

在沒有面試之前,你永遠不知道本身學的其實很是少。

在第一次面試受到打擊以後,我便決定開始面向面試複習,把這類問題通通找出來搞懂。

面向面試複習

既然咱們的目標是面試,那麼就必需要搞懂面試題都喜歡考哪些集合類的問題。

因而,上網找面試題就成爲一件重要的工做,我花了好幾天的時間到網上搜颳了各種Java面試題,不論是BAT的面經,仍是網上整理比較詳細的300道面試題,我都找來看了,雖然有不少重複的題目,可是大部分題目都是我沒見過的。

原來Java集合類能夠問出這麼多問題來。

就拿ArrayList來講,能夠問數據結構,能夠問擴容和一些方法的實現,也能夠問你它和linkedlist、vector的區別,複雜一點的,甚至會問你線程安全的ArrayList是怎麼實現的,刪除它裏面的某個元素應該如何刪除。

看起來簡單問題的背後,其實都有不少坑,我也是看了不少面試題解析以後才慢慢了解到的。

Java集合類裏最常問的一類題目,無疑就是hashmap了,這玩意實在是太熱門了。

hashmap的數據結構是怎麼樣的,1.8和之前有什麼區別麼,put方法和get又是怎麼實現的,擴容是如何進行的,甚至還會問你具體的hash算法是怎麼實現的。

更復雜的還有呢,併發工具類裏的linkedhashmap和hashmap有何區別,它又是如何實現的呢,這就牽扯到不少併發編程的相關知識了,這部分咱們留着下次講併發編程的內容時再來一塊兒探討。

看過足夠多的集合類面試題,參加了足夠多的面試以後,我彷佛對這些面試題已經無感了,畢竟熟讀唐詩三百首,不會作詩也會吟啊,就這麼幾種題型,天天回答個三五遍,幾個月裏都忘不掉了。

可是,事情並無我想象的這麼簡單。雖然這些面試題多看幾遍確實容易記住,可是記憶不能當飯吃,面試時萬一想不出來那但是硬傷,更重要的是,不少時候,面試官問問題都不會按常理出牌,這些網上能找到的面試題,他們同樣能夠用別的方式不停地深挖,直到他了解到你的水平爲止。

若是你只會簡單地告訴面試官那些死記硬背的答案,而在他深挖集合類實現細節的時候沒能答好的話,也是很扣分的,特別是對於美團、阿里這種Java大廠來講,他們摳細節的能力絕對超出你的想象。

搞懂原理最重要

既然面向面試題複習的方式不必定老是奏效,那麼有沒有更加好的選擇呢。

還真有,那就是,理解技術的實現原理。面試題是個好東西,可是咱們不能只停留在簡單的一問一答上,並非說你搞懂了這個面試題的答案是什麼就好了。
舉個例子,好比說,Java中的hashmap的數據結構是什麼樣的,它的擴容方式又是如何的,這種時候,若是光是依靠面試題的答案去理解,多少會有一些片面。
你可能能夠大概答出個三四點,可是其實你可能也沒真正理解爲何要這樣作,或者實現細節是怎麼樣的。

實際上,要想真正瞭解hashmap的數據結構和實現原理,最好的辦法就是去看源碼,有的小夥伴確定會眉頭一皺,源碼這麼複雜,看不懂怎麼辦,不要緊,本身看不懂,還可讓別人教你呀,網上有不少源碼解析的博客,我本身也整理了很多,發在我們的技術博客how2playlife.com上。

爲何要看源碼呢,好比hashmap,它的類定義裏就已經展現了它的數據結構,咱們能夠從中看出它是一個數組加鏈表的數據結構,這些成員變量都是在hashmap這個類裏定義好的,而且,再看看它的put和get方法,你就能夠知道它是如何插入和查詢數據的,而且,在1.7和1.8源碼比較的過程當中,你也能夠更好地理解這兩個版本源碼的區別。

而對於擴容方法也是同樣的,在hashmap的擴容方法中,你能夠看到的是,hashmap爲了把原來的數據搬到擴容後的數據結構中,就必需要進行從新哈希,調整每一個元素的索引和位置,這裏面涉及了一系列算法,不看源碼的話,你根本不知道擴容過程當中到底發生了什麼。

當你看完源碼,無論你遇到的是原來那些面試題,仍是有一些新的面試題,你總會發現其實都差很少,萬變不離其宗,只要你理解了底層的實現以後,對於這些面試題應該都可以比較好地應付。

有些事,你必需要經歷過,才能明白,有些坑,你不用本身去踩,由於我已經踩過了

推薦資源

書籍

實際上市面上並無針對Java集合類專門出的書籍,畢竟集合類只是JDK裏的一小部分。

在以前那篇關於學習Java基礎的文章裏,我推薦給了你們一些書籍,裏面也講了不少關於集合類的東西。

《Java核心技術卷一》
《Java編程思想》

博客

Java技術倉庫《Java程序員複習指南》

https://github.com/h2pl/Java-Tutorial

整合全網優質Java學習內容,幫助你從基礎到進階系統化複習Java。

個人我的博客:https://how2playlife.com/

社區:
CDSN我就不推薦了,反正百度大家搜一下也都是CSDN的結果

這裏重點推薦兩個社區,實打實的有不少乾貨,對文章要求比較高,個人不少文章質量都達不到他們的要求。

一、掘金
https://juejin.im/user/5b1d0d34e51d4506d936f561

二、開發者頭條 https://toutiao.io/subjects/329410

總結

關於如何學習Java集合類,而且搞定相關面試題,咱們今天就講到這裏了,若是還有什麼疑問也能夠到我公衆號裏找我探討,後續會有更多的文章推出,包括如何系統性地學習JavaWeb,如何系統性地學習Java核心技術和底層原理,以及如何系統性地學習後端技術。敬請期待。

對了,你想問我文章裏提到的書籍和視頻去哪找?我已經給你準備好了

文中提到的資源均可以避免費領取,在個人公衆號【程序員黃小斜】回覆「Java基礎」便可免費領取對應的資源。

寫在最後

若是以爲本文對你有幫助的話,請你也不要吝嗇你的「好看」哈,轉發朋友圈就是對我最大的支持啦,大家的支持是對我最大的鼓勵。

對本系列文章有什麼建議和意見,也歡迎留言告訴我,期待你的回饋。另外本系列文章也會製做成相應的視頻放到B站,趕忙來B站關注我吧。

微信公衆號:程序員黃小斜
知乎:黃小斜
B站:黃小斜
相關文章
相關標籤/搜索