10道常考Java集合面試題(附答案)

10道??糐ava集合面試題(附答案)

長(zhǎng)沙達(dá)內(nèi)教育      2022-04-06 16:00:01     6

10道??糐ava集合面試題(附答案),在java程序員崗位的面試中,面試題是一定缺少不了的,會(huì)通過面試的方式來考察面試者的java專業(yè)知識(shí)。在面試前,一定要做好各種ja

課程價(jià)格 請(qǐng)咨詢

上課時(shí)段: 授課校區(qū):

詳細(xì)介紹

在java程序員崗位的面試中,面試題是一定缺少不了的,會(huì)通過面試的方式來考察面試者的java專業(yè)知識(shí)。在面試前,一定要做好各種java基礎(chǔ)知識(shí)的功課,其中 java集合面試題是做的必要準(zhǔn)備之一,集合屬于java知識(shí)框架中的核心內(nèi)容,需要大家好好學(xué)習(xí)。下面整理了10道??糺ava集合面試題,大家可以用來自測(cè)集合方面的基礎(chǔ)知識(shí)掌握的怎么樣。

1、Java集合框架是什么?說出集合框架的一些優(yōu)點(diǎn)?

答:每種編程語言中都有集合,最初的Java版本包含幾種集合類:Vector、Stack、HashTable和Array。隨著集合的廣泛使用,Java1.2提出了囊括所有集合接口、實(shí)現(xiàn)和算法的集合框架。

在保證線程安全的情況下使用泛型和并發(fā)集合類,Java已經(jīng)經(jīng)歷了很久。它還包括在Java并發(fā)包中,阻塞接口以及它們的實(shí)現(xiàn)。集合框架的部分優(yōu)點(diǎn)如下:

(1)使用核心集合類降低開發(fā)成本,而非實(shí)現(xiàn)我們自己的集合類。

(2)隨著使用經(jīng)過嚴(yán)格測(cè)試的集合框架類,代碼質(zhì)量會(huì)得到提高。

(3)通過使用JDK附帶的集合類,可以降低代碼維護(hù)成本。

(4)復(fù)用性和可操作性。

2、集合框架中的泛型有什么優(yōu)點(diǎn)?

答:Java1.5引入了泛型,所有的集合接口和實(shí)現(xiàn)都大量地使用它。泛型允許我們?yōu)榧咸峁┮粋€(gè)可以容納的對(duì)象類型,因此,如果你添加其它類型的任何元素,它會(huì)在編譯時(shí)報(bào)錯(cuò)。這避免了在運(yùn)行時(shí)出現(xiàn)ClassCastException,因?yàn)槟銓?huì)在編譯時(shí)得到報(bào)錯(cuò)信息。

泛型也使得代碼整潔,我們不需要使用顯式轉(zhuǎn)換和instanceOf操作符。它也給運(yùn)行時(shí)帶來好處,因?yàn)椴粫?huì)產(chǎn)生類型檢查的字節(jié)碼指令。

3、HashMap和Hashtable的區(qū)別是什么?

答:HashMap和Hashtable都實(shí)現(xiàn)了Map接口,并且都是key-value的數(shù)據(jù)結(jié)構(gòu)。它們的不同點(diǎn)主要在三個(gè)方面:

第一,Hashtable是Java1.1的一個(gè)類,它基于陳舊的Dictionary類。而HashMap是Java1.2引進(jìn)的Map接口的一個(gè)實(shí)現(xiàn)。

第二,Hashtable是線程安全的,也就是說是線程同步的,而HashMap是線程不安全的。也就是說在單線程環(huán)境下應(yīng)該用HashMap,這樣效率更高。

第三,HashMap允許將null值作為key或value,但Hashtable不允許(會(huì)拋出NullPointerException)。

4、List和Map區(qū)別?

答:在數(shù)據(jù)結(jié)構(gòu)方面,List存儲(chǔ)的是單列數(shù)據(jù)的集合,而Map存儲(chǔ)的是key、value類型的數(shù)據(jù)集合。在數(shù)據(jù)存儲(chǔ)方面,List存儲(chǔ)的數(shù)據(jù)是有序且可以重復(fù)的,而Map中存儲(chǔ)的數(shù)據(jù)是無序且key值不能重復(fù)(value值可以重復(fù))。

5、List、Map、Set三個(gè)接口,存取元素時(shí),各有什么特點(diǎn)?

答:List與Set具有相似性,它們都是單列元素的集合,所以,它們有一個(gè)功共同的父接口,叫Collection。Set里面不允許有重復(fù)的元素,所謂重復(fù),即不能有兩個(gè)相等(注意,不是僅僅是相同)的對(duì)象 ,即假設(shè)Set集合中有了一個(gè)A對(duì)象,現(xiàn)在我要向Set集合再存入一個(gè)B對(duì)象,但B對(duì)象與A對(duì)象equals相等,則B對(duì)象存儲(chǔ)不進(jìn)去。所以,Set集合的add方法有一個(gè)boolean的返回值,當(dāng)集合中沒有某個(gè)元素,此時(shí)add方法可成功加入該元素時(shí),則返回true,當(dāng)集合含有與某個(gè)元素equals相等的元素時(shí),此時(shí)add方法無法加入該元素,返回結(jié)果為false。Set取元素時(shí),沒法說取第幾個(gè),只能以Iterator接口取得所有的元素,再逐一遍歷各個(gè)元素。

List表示有先后順序的集合, 注意,不是那種按年齡、按大小、按價(jià)格之類的排序。當(dāng)我們多次調(diào)用add(Obj e)方法時(shí),每次加入的對(duì)象就像火車站買票有排隊(duì)順序一樣,按先來后到的順序排序。有時(shí)候,也可以插隊(duì),即調(diào)用add(int index,Obj e)方法,就可以指定當(dāng)前對(duì)象在集合中的存放位置。一個(gè)對(duì)象可以被反復(fù)存儲(chǔ)進(jìn)List中,每調(diào)用一次add方法,這個(gè)對(duì)象就被插入進(jìn)集合中一次,其實(shí),并不是把這個(gè)對(duì)象本身存儲(chǔ)進(jìn)了集合中,而是在集合中用一個(gè)索引變量指向這個(gè)對(duì)象,當(dāng)這個(gè)對(duì)象被add多次時(shí),即相當(dāng)于集合中有多個(gè)索引指向了這個(gè)對(duì)象,如圖x所示。List除了可以以Iterator接口取得所有的元素,再逐一遍歷各個(gè)元素之外,還可以調(diào)用get(index i)來明確說明取第幾個(gè)。

Map與List和Set不同,它是雙列的集合,其中有put方法,定義如下:put(obj key,obj value),每次存儲(chǔ)時(shí),要存儲(chǔ)一對(duì)key/value,不能存儲(chǔ)重復(fù)的key,這個(gè)重復(fù)的規(guī)則也是按equals比較相等。取則可以根據(jù)key獲得相應(yīng)的value,即get(Object key)返回值為key 所對(duì)應(yīng)的value。另外,也可以獲得所有的key的結(jié)合(map.keySet()),還可以獲得所有的value的結(jié)合(map.values()),還可以獲得key和value組合成的Map.Entry對(duì)象的集合(map.entrySet())。

6、Java集合框架的基礎(chǔ)接口有哪些?

答:Collection為集合層級(jí)的根接口。一個(gè)集合代表一組對(duì)象,這些對(duì)象即為它的元素。Java平臺(tái)不提供這個(gè)接口任何直接的實(shí)現(xiàn)。

Set是一個(gè)不能包含重復(fù)元素的集合。這個(gè)接口對(duì)數(shù)學(xué)集合抽象進(jìn)行建模,被用來代表集合,就如一副牌。

List是一個(gè)有序集合,可以包含重復(fù)元素。你可以通過它的索引來訪問任何元素。List更像長(zhǎng)度動(dòng)態(tài)變換的數(shù)組。

Map是一個(gè)將key映射到value的對(duì)象.一個(gè)Map不能包含重復(fù)的key:每個(gè)key最多只能映射一個(gè)value。

一些其它的接口有Queue、Dequeue、SortedSet、SortedMap和ListIterator。

7、為什么Map接口不繼承Collection接口?

答:盡管Map接口和它的實(shí)現(xiàn)也是集合框架的一部分,但Map不是集合,集合也不是Map。因此,Map繼承Collection毫無意義,反之亦然。如果Map繼承Collection接口,那么元素去哪兒?Map包含key-value對(duì),它提供抽取key或value列表集合的方法,但是它不適合“一組對(duì)象”規(guī)范。

8、Iterater和ListIterator之間有什么區(qū)別?

答:(1)我們可以使用Iterator來遍歷Set和List集合,而ListIterator只能遍歷List;(2)Iterator只可以向前遍歷,而LIstIterator可以雙向遍歷;(3)ListIterator從Iterator接口繼承,然后添加了一些額外的功能,比如添加一個(gè)元素、替換一個(gè)元素、獲取前面或后面元素的索引位置。

9、集合框架中的泛型有什么優(yōu)點(diǎn)?

答:Java1.5引入了泛型,所有的集合接口和實(shí)現(xiàn)都大量地使用它。泛型允許我們?yōu)榧咸峁┮粋€(gè)可以容納的對(duì)象類型,因此,如果你添加其它類型的任何元素,它會(huì)在編譯時(shí)報(bào)錯(cuò)。這避免了在運(yùn)行時(shí)出現(xiàn)ClassCastException,因?yàn)槟銓?huì)在編譯時(shí)得到報(bào)錯(cuò)信息。泛型也使得代碼整潔,我們不需要使用顯式轉(zhuǎn)換和instanceOf操作符。它也給運(yùn)行時(shí)帶來好處,因?yàn)椴粫?huì)產(chǎn)生類型檢查的字節(jié)碼指令。

10、Map接口提供了哪些不同的集合視圖?

答:Map接口提供三個(gè)集合視圖:

(1)Set keyset():返回map中包含的所有key的一個(gè)Set視圖。集合是受map支持的,map的變化會(huì)在集合中反映出來,反之亦然。當(dāng)一個(gè)迭代器正在遍歷一個(gè)集合時(shí),若map被修改了(除迭代器自身的移除操作以外),迭代器的結(jié)果會(huì)變?yōu)槲炊x。集合支持通過Iterator的Remove、Set.remove、removeAll、retainAll和clear操作進(jìn)行元素移除,從map中移除對(duì)應(yīng)的映射。它不支持add和addAll操作。

(2)Collection values():返回一個(gè)map中包含的所有value的一個(gè)Collection視圖。這個(gè)collection受map支持的,map的變化會(huì)在collection中反映出來,反之亦然。當(dāng)一個(gè)迭代器正在遍歷一個(gè)collection時(shí),若map被修改了(除迭代器自身的移除操作以外),迭代器的結(jié)果會(huì)變?yōu)槲炊x。集合支持通過Iterator的Remove、Set.remove、removeAll、retainAll和clear操作進(jìn)行元素移除,從map中移除對(duì)應(yīng)的映射。它不支持add和addAll操作。

(3)Set> entrySet():返回一個(gè)map鐘包含的所有映射的一個(gè)集合視圖。這個(gè)集合受map支持的,map的變化會(huì)在collection中反映出來,反之亦然。當(dāng)一個(gè)迭代器正在遍歷一個(gè)集合時(shí),若map被修改了(除迭代器自身的移除操作,以及對(duì)迭代器返回的entry進(jìn)行setValue外),迭代器的結(jié)果會(huì)變?yōu)槲炊x。集合支持通過Iterator的Remove、Set.remove、removeAll、retainAll和clear操作進(jìn)行元素移除,從map中移除對(duì)應(yīng)的映射。它不支持add和addAll操作。

以上就是今天為大家整理的java集合面試題,題目都是比較基礎(chǔ)的,也是在面試時(shí)有很大幾率出現(xiàn)的,所以大家務(wù)必要掌握這10道java集合面試題中所包含的知識(shí)點(diǎn),遇到不會(huì)的模糊內(nèi)容,要及時(shí)通過專業(yè)書或者java視頻教程的方式來搞懂不明白的地方,當(dāng)然要通過一家大型互聯(lián)網(wǎng)公司的面試,光靠java集合面試題是不夠的,長(zhǎng)沙達(dá)內(nèi)教育匯總的史上最全的java面試題或許能給你相應(yīng)的幫助,希望大家可以順利通過面試,

培訓(xùn)啦提醒您:交易時(shí)請(qǐng)核實(shí)對(duì)方資質(zhì),對(duì)于過大宣傳或承諾需謹(jǐn)慎!任何要求預(yù)付定金、匯款等方式均存在風(fēng)險(xiǎn),謹(jǐn)防上當(dāng)。