面試之Java基礎(chǔ)問(wèn)題(1)

本文介紹一些和List、Set、Map面試常問(wèn)問(wèn)題驻民。
在 Java 中除了以 Map 結(jié)尾的類之外绽左, 其他類都實(shí)現(xiàn)了 Collection 接口悼嫉。并且以 Map 結(jié)尾的類都實(shí)現(xiàn)了 Map 接口。
注意:文中提到的線程安全拼窥,并發(fā)承粤,Sychronized等知識(shí)點(diǎn),如果不太清楚闯团,作者會(huì)在后面的Java并發(fā)面試題中會(huì)有所整理和解釋辛臊。

問(wèn)題1:List和Set和Map的區(qū)別?

  • List可以有重復(fù)的對(duì)象房交,Set不可以有重復(fù)的對(duì)象彻舰;
  • List元素是有序的,Set沒(méi)法保證有序候味;
  • List可以插入多個(gè)null值刃唤,Set只能插入一個(gè);
  • Map,key-value的鍵值對(duì)白群,entry對(duì)象形式尚胞,key是無(wú)序,不可重復(fù)的帜慢;value是無(wú)序笼裳,可重復(fù)的唯卖;

問(wèn)題2:List和Set和Map的實(shí)現(xiàn)方式分別由哪些?

  • List的實(shí)現(xiàn)方式:數(shù)據(jù)結(jié)構(gòu)
    1)ArrayList : Object[]數(shù)組
    2)Vector: Object[]數(shù)組
    3)LinkedList: 雙向鏈表
  • Set的實(shí)現(xiàn)方式:數(shù)據(jù)結(jié)構(gòu)
    1)HashSet(無(wú)序躬柬,唯一): 基于 HashMap 實(shí)現(xiàn)的拜轨,底層采用 HashMap 來(lái)保存元素
    2)LinkedHashSet:LinkedHashSet 是 HashSet 的子類,并且其內(nèi)部是通過(guò) LinkedHashMap 來(lái)實(shí)現(xiàn)的允青。
    3)TreeSet(有序橄碾,唯一): 紅黑樹(shù)(自平衡的排序二叉樹(shù))
  • Map的實(shí)現(xiàn)方式:數(shù)據(jù)結(jié)構(gòu)
    1)HashMap: JDK1.8 之前 HashMap 由數(shù)組+鏈表組成的。JDK1.8 以后颠锉,將鏈表轉(zhuǎn)化為紅黑樹(shù)
    2)LinkedHashMap: LinkedHashMap 繼承自 HashMap法牲,所以它的底層仍然是基于拉鏈?zhǔn)缴⒘薪Y(jié)構(gòu)即由數(shù)組和鏈表或紅黑樹(shù)組成
    3)Hashtable: 數(shù)組+鏈表組成的
    4)TreeMap: 紅黑樹(shù)

問(wèn)題3:ArrayList 和 Vector 和 LinkedList 的區(qū)別?

  • 線程安全: ArrayList 和 LinkedList 都是不同步的琼掠,也就是不保證線程安全拒垃;Vector是線程安全的;
  • 底層數(shù)據(jù)結(jié)構(gòu): Arraylist 和Vector 底層使用的是 Object 數(shù)組眉枕;LinkedList 底層使用的是 雙向鏈表恶复;
  • 插入和刪除: ArrayList 采用數(shù)組存儲(chǔ),所以插入和刪除元素的時(shí)間復(fù)雜度受元素位置的影響速挑;LinkedList 采用鏈表存儲(chǔ)谤牡,所以對(duì)于add(E e)方法的插入,刪除元素時(shí)間復(fù)雜度不受元素位置的影響姥宝;
  • 支持快速隨機(jī)訪問(wèn): LinkedList 不支持高效的隨機(jī)元素訪問(wèn)翅萤,而 ArrayList 支持。
  • 內(nèi)存空間: LinkedList 比ArrayList的空間花費(fèi)更多的空間(因?yàn)橐娣胖苯雍罄^和直接前驅(qū)以及數(shù)據(jù))腊满。

問(wèn)題4:HashSet 和 LinkedHashSet 和 TreeSet 的區(qū)別套么?

  • HashSet 是 Set 接口的主要實(shí)現(xiàn)類 ,HashSet 的底層是 HashMap碳蛋,線程不安全的胚泌,可以存儲(chǔ) null 值;
  • LinkedHashSet 是 HashSet 的子類肃弟,能夠按照添加的順序遍歷玷室;
  • TreeSet 底層使用紅黑樹(shù),能夠按照添加元素的順序進(jìn)行遍歷笤受,排序的方式有自然排序和定制排序穷缤。

問(wèn)題5:HashMap 和 HashTable 的區(qū)別?

  • 線程安全: HashMap 是非線程安全的箩兽,HashTable 是線程安全的津肛。因?yàn)?HashTable 內(nèi)部的方法基本都經(jīng)過(guò)synchronized 修飾。
  • 效率: 因?yàn)榫€程安全的問(wèn)題汗贫,HashMap 要比 HashTable 效率高身坐。另外秸脱,HashTable 基本被淘汰,不要在代碼中使用它掀亥;
  • key / value 為 null : HashMap 可以存儲(chǔ) null 的 key 和 value撞反,但 null 作為鍵只能有一個(gè)妥色,null 作為值可以有多個(gè)搪花;HashTable 不允許有 null 鍵和 null 值,否則會(huì)拋出 NullPointerException嘹害。
  • 初始容量和擴(kuò)容:1)創(chuàng)建時(shí)如果不指定容量初始值撮竿,Hashtable 默認(rèn)的初始大小為 11,之后每次擴(kuò)充笔呀,容量變?yōu)樵瓉?lái)的 2n+1幢踏。HashMap 默認(rèn)的初始化大小為 16。之后每次擴(kuò)充许师,容量變?yōu)樵瓉?lái)的 2 倍房蝉。2)創(chuàng)建時(shí)如果給定了容量初始值,那么 Hashtable 會(huì)直接使用你給定的大小微渠,而 HashMap 會(huì)將其擴(kuò)充為 2 的冪次方大小搭幻。
  • 底層數(shù)據(jù)結(jié)構(gòu): JDK1.8 以后的 HashMap 在解決哈希沖突時(shí)有了較大的變化,當(dāng)鏈表長(zhǎng)度大于閾值(默認(rèn)為 8)時(shí)逞盆,將鏈表轉(zhuǎn)化為紅黑樹(shù)檀蹋,以減少搜索時(shí)間。

從以上幾個(gè)問(wèn)題可以總結(jié)出云芦,當(dāng)問(wèn)到這些集合之間的區(qū)別的時(shí)候俯逾,一般要答這幾點(diǎn):線程安全、底層數(shù)據(jù)結(jié)構(gòu)舅逸、有序無(wú)序桌肴、可否存null值、效率等琉历。

問(wèn)題6:如何選擇該使用哪些集合坠七?

  1. 當(dāng)要保存一組同類型數(shù)據(jù)時(shí),首先想到的容器可能就時(shí)數(shù)組善已,但用數(shù)組存儲(chǔ)對(duì)象存在弊端灼捂, 因?yàn)槲覀冊(cè)趯?shí)際開(kāi)發(fā)中,存儲(chǔ)的數(shù)據(jù)的類型是多種多樣的换团,“集合”的出現(xiàn)就使得數(shù)據(jù)存儲(chǔ)更加靈活悉稠,集合同樣也是用來(lái)存儲(chǔ)多個(gè)數(shù)據(jù)的
  2. 數(shù)組的缺點(diǎn)是聲明時(shí)要初始化大兴野的猛;聲明數(shù)組時(shí)的數(shù)據(jù)類型也決定了該數(shù)組存儲(chǔ)的數(shù)據(jù)的類型耀盗;而且,數(shù)組存儲(chǔ)的數(shù)據(jù)是有序的卦尊、可重復(fù)的叛拷,特點(diǎn)單一。 集合靈活性更高岂却,Java 中集合可用來(lái)存儲(chǔ)不同類型不同數(shù)量的對(duì)象忿薇,也可保存具有映射關(guān)系的數(shù)據(jù)。

1)根據(jù)集合的特點(diǎn)來(lái)選躏哩,如我們需要根據(jù)鍵值獲取到元素值時(shí)就選用 Map 接口下的集合署浩,需要排序時(shí)選擇 TreeMap,不需要排序時(shí)就選擇HashMap,需要保證線程安全就選用 ConcurrentHashMap
2)只需要存放元素值時(shí)扫尺,就選擇實(shí)現(xiàn)Collection 接口的集合筋栋,需要保證元素唯一時(shí)選擇實(shí)現(xiàn) Set 接口的集合比如 TreeSetHashSet,不需要就選擇實(shí)現(xiàn) List 接口的比如 ArrayListLinkedList正驻,然后再根據(jù)實(shí)現(xiàn)這些接口的集合的特點(diǎn)來(lái)選用弊攘。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市姑曙,隨后出現(xiàn)的幾起案子襟交,更是在濱河造成了極大的恐慌,老刑警劉巖渣磷,帶你破解...
    沈念sama閱讀 219,589評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件婿着,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡醋界,警方通過(guò)查閱死者的電腦和手機(jī)竟宋,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,615評(píng)論 3 396
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)形纺,“玉大人丘侠,你說(shuō)我怎么就攤上這事≈鹧” “怎么了蜗字?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,933評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)脂新。 經(jīng)常有香客問(wèn)我挪捕,道長(zhǎng),這世上最難降的妖魔是什么争便? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,976評(píng)論 1 295
  • 正文 為了忘掉前任级零,我火速辦了婚禮,結(jié)果婚禮上滞乙,老公的妹妹穿的比我還像新娘奏纪。我一直安慰自己鉴嗤,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,999評(píng)論 6 393
  • 文/花漫 我一把揭開(kāi)白布序调。 她就那樣靜靜地躺著醉锅,像睡著了一般。 火紅的嫁衣襯著肌膚如雪发绢。 梳的紋絲不亂的頭發(fā)上硬耍,一...
    開(kāi)封第一講書(shū)人閱讀 51,775評(píng)論 1 307
  • 那天,我揣著相機(jī)與錄音朴摊,去河邊找鬼默垄。 笑死此虑,一個(gè)胖子當(dāng)著我的面吹牛甚纲,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播朦前,決...
    沈念sama閱讀 40,474評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼介杆,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了韭寸?” 一聲冷哼從身側(cè)響起春哨,我...
    開(kāi)封第一講書(shū)人閱讀 39,359評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎恩伺,沒(méi)想到半個(gè)月后赴背,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,854評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡晶渠,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,007評(píng)論 3 338
  • 正文 我和宋清朗相戀三年凰荚,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片褒脯。...
    茶點(diǎn)故事閱讀 40,146評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡便瑟,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出番川,到底是詐尸還是另有隱情到涂,我是刑警寧澤,帶...
    沈念sama閱讀 35,826評(píng)論 5 346
  • 正文 年R本政府宣布颁督,位于F島的核電站践啄,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏沉御。R本人自食惡果不足惜屿讽,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,484評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望嚷节。 院中可真熱鬧聂儒,春花似錦虎锚、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,029評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至非春,卻和暖如春柱徙,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背奇昙。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,153評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工护侮, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人储耐。 一個(gè)月前我還...
    沈念sama閱讀 48,420評(píng)論 3 373
  • 正文 我出身青樓羊初,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親什湘。 傳聞我的和親對(duì)象是個(gè)殘疾皇子长赞,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,107評(píng)論 2 356