文章內容輸出來源:拉勾教育Java高薪訓練營,做者:孫裏面試
【歪裏諧說】1 JVM內存結構 https://my.oschina.net/u/4033707/blog/4444869安全
前言
你們好,上次看完【重講拉勾】1 JVM內存結構
感受怎麼樣?此次,咱們沿用上次的思路來記憶下Java容器的內容。併發
問題
面試時是否是會被問道:請你講講你所瞭解的Java容器,記住多少講多少。
也許說到某一個具體類時,你能夠說出些皮毛。可是,面對總體那麼多類,你又能記住多少個呢?先看下面這張經常使用容器一覽圖,其中我又抽象出了生活場景中的車位。學習
(點開看清晰全圖).net
下邊咱們逐個分開看下:
1. List
對照上邊兩張圖有沒有感受?第二張圖像不像ArrayList?若是這條路是死衚衕,像不像Stack?線程
寫時複製我想象到的是臨時車位,你也能夠理解成由於這個車位有車,你只好在旁邊臨時停靠一下。(更深層次的細節能夠忽略,主要是爲了映射一個方便記憶的概念)code
2. Set
爲何使用車展表示Set呢?由於set的最大特性就是元素不重複,而車展上通常都是每一個型號只有一輛車(忽略特殊狀況)。對象
這裏說下EnumSet。由於裏邊存的是枚舉類型,即同一個類別中的不一樣選項。好比,Color.Blue、Color.Red等等,是否是和同款車型,不一樣型號(高配,低配),不一樣顏色的型號相似呢。blog
再說下ConcurrentSkipListSet。併發線程安全能夠想象成有多個樓層的車展場所(各個樓層的活動和人流互不影響),並且時不時還掛着區域標識(好比A二、B4),讓人能夠快速按順序找到本身想去的展位。隊列
3. Queue
像不像隊列?每輛車都只能按順序通行(這裏先忽略超車插隊的狀況,後邊會提到)
想象成雙端隊列,對比單行路一個方向而言,兩個方向均可以出車。
若是我不說,你是否是已經想到了堵塞隊列?
有沒有發佈訂閱/生產者消費者的感受?通常機場或者車站外邊會有必定數量的出租車在等候,若是車都走了,只能是旅客排隊等候了。
4S店的試駕車可能一個型號只有一輛,須要排隊等候。而後來一個客戶就能夠出發。
仍是結合多層互不干擾的想法,是否是能夠類比線程安全?
須要等候紅燈的場景是否是能夠聯想到延遲等待隊列?多岔路口又能夠類比有優先級的阻塞隊列。
開過車的人都知道轉彎的車要讓直行的車先走,或者還能夠想象救護車、消防車等有行駛優先權的車,這就叫優先級隊列。
而車距遠近是爲了理解Array和Link的對象地址是否連續的狀況。
4. Map
小區車位都是標記了車牌號的,只有車位的主人才能停放。通常也是按照門牌號順序排列的。
若是有外來車輛須要臨時停靠,可能也會佔用。可是當車主的車輛回來的時候,臨時佔用者不得不挪開。
有時候只須要覈對車牌號,有時候還要覈對車型。
有的高檔小區會有多層底下停車位,同樣仍是每層互不干擾。
結語
看了這麼多的圖,是否是稍微有點印象了?再應付面試時問到集合類有哪些時是否是好歹能夠說出幾個了?(可別說成停車場)
本文的目的仍是爲了解決知識持久化的問題,相關知識的學習還須要繼續深刻查閱其餘資料。好了,本期到此,咱們下期見。若是還有下期的話~