更新時(shí)間:2020-10-20 16:59:14 來(lái)源:動(dòng)力節(jié)點(diǎn) 瀏覽6603次
在java程序員崗位的面試中,面試題是一定缺少不了的,會(huì)通過(guò)面試的方式來(lái)考察面試者的java專(zhuān)業(yè)知識(shí)。在面試前,一定要做好各種java基礎(chǔ)知識(shí)的功課,其中 java集合面試題是做的必要準(zhǔn)備之一,集合屬于java知識(shí)框架中的核心內(nèi)容,需要大家好好學(xué)習(xí)。下面整理了10道常考java集合面試題,大家可以用來(lái)自測(cè)集合方面的基礎(chǔ)知識(shí)掌握的怎么樣。
答:每種編程語(yǔ)言中都有集合,最初的Java版本包含幾種集合類(lèi):Vector、Stack、HashTable和Array。隨著集合的廣泛使用,Java1.2提出了囊括所有集合接口、實(shí)現(xiàn)和算法的集合框架。
在保證線(xiàn)程安全的情況下使用泛型和并發(fā)集合類(lèi),Java已經(jīng)經(jīng)歷了很久。它還包括在Java并發(fā)包中,阻塞接口以及它們的實(shí)現(xiàn)。集合框架的部分優(yōu)點(diǎn)如下:
(1)使用核心集合類(lèi)降低開(kāi)發(fā)成本,而非實(shí)現(xiàn)我們自己的集合類(lèi)。
(2)隨著使用經(jīng)過(guò)嚴(yán)格測(cè)試的集合框架類(lèi),代碼質(zhì)量會(huì)得到提高。
(3)通過(guò)使用JDK附帶的集合類(lèi),可以降低代碼維護(hù)成本。
(4)復(fù)用性和可操作性。
答:Java1.5引入了泛型,所有的集合接口和實(shí)現(xiàn)都大量地使用它。泛型允許我們?yōu)榧咸峁┮粋€(gè)可以容納的對(duì)象類(lèi)型,因此,如果你添加其它類(lèi)型的任何元素,它會(huì)在編譯時(shí)報(bào)錯(cuò)。這避免了在運(yùn)行時(shí)出現(xiàn)ClassCastException,因?yàn)槟銓?huì)在編譯時(shí)得到報(bào)錯(cuò)信息。
泛型也使得代碼整潔,我們不需要使用顯式轉(zhuǎn)換和instanceOf操作符。它也給運(yùn)行時(shí)帶來(lái)好處,因?yàn)椴粫?huì)產(chǎn)生類(lèi)型檢查的字節(jié)碼指令。
答:HashMap和Hashtable都實(shí)現(xiàn)了Map接口,并且都是key-value的數(shù)據(jù)結(jié)構(gòu)。它們的不同點(diǎn)主要在三個(gè)方面:
第一,Hashtable是Java1.1的一個(gè)類(lèi),它基于陳舊的Dictionary類(lèi)。而HashMap是Java1.2引進(jìn)的Map接口的一個(gè)實(shí)現(xiàn)。
第二,Hashtable是線(xiàn)程安全的,也就是說(shuō)是線(xiàn)程同步的,而HashMap是線(xiàn)程不安全的。也就是說(shuō)在單線(xiàn)程環(huán)境下應(yīng)該用HashMap,這樣效率更高。
第三,HashMap允許將null值作為key或value,但Hashtable不允許(會(huì)拋出NullPointerException)。
答:在數(shù)據(jù)結(jié)構(gòu)方面,List存儲(chǔ)的是單列數(shù)據(jù)的集合,而Map存儲(chǔ)的是key、value類(lèi)型的數(shù)據(jù)集合。在數(shù)據(jù)存儲(chǔ)方面,List存儲(chǔ)的數(shù)據(jù)是有序且可以重復(fù)的,而Map中存儲(chǔ)的數(shù)據(jù)是無(wú)序且key值不能重復(fù)(value值可以重復(fù))。
答: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)集合中沒(méi)有某個(gè)元素,此時(shí)add方法可成功加入該元素時(shí),則返回true,當(dāng)集合含有與某個(gè)元素equals相等的元素時(shí),此時(shí)add方法無(wú)法加入該元素,返回結(jié)果為false。Set取元素時(shí),沒(méi)法說(shuō)取第幾個(gè),只能以Iterator接口取得所有的元素,再逐一遍歷各個(gè)元素。
List表示有先后順序的集合, 注意,不是那種按年齡、按大小、按價(jià)格之類(lèi)的排序。當(dāng)我們多次調(diào)用add(Obj e)方法時(shí),每次加入的對(duì)象就像火車(chē)站買(mǎi)票有排隊(duì)順序一樣,按先來(lái)后到的順序排序。有時(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)來(lái)明確說(shuō)明取第幾個(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())。
答:Collection為集合層級(jí)的根接口。一個(gè)集合代表一組對(duì)象,這些對(duì)象即為它的元素。Java平臺(tái)不提供這個(gè)接口任何直接的實(shí)現(xiàn)。
Set是一個(gè)不能包含重復(fù)元素的集合。這個(gè)接口對(duì)數(shù)學(xué)集合抽象進(jìn)行建模,被用來(lái)代表集合,就如一副牌。
List是一個(gè)有序集合,可以包含重復(fù)元素。你可以通過(guò)它的索引來(lái)訪問(wèn)任何元素。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。
答:盡管Map接口和它的實(shí)現(xiàn)也是集合框架的一部分,但Map不是集合,集合也不是Map。因此,Map繼承Collection毫無(wú)意義,反之亦然。如果Map繼承Collection接口,那么元素去哪兒?Map包含key-value對(duì),它提供抽取key或value列表集合的方法,但是它不適合“一組對(duì)象”規(guī)范。
答:(1)我們可以使用Iterator來(lái)遍歷Set和List集合,而ListIterator只能遍歷List;(2)Iterator只可以向前遍歷,而LIstIterator可以雙向遍歷;(3)ListIterator從Iterator接口繼承,然后添加了一些額外的功能,比如添加一個(gè)元素、替換一個(gè)元素、獲取前面或后面元素的索引位置。
答:Java1.5引入了泛型,所有的集合接口和實(shí)現(xiàn)都大量地使用它。泛型允許我們?yōu)榧咸峁┮粋€(gè)可以容納的對(duì)象類(lèi)型,因此,如果你添加其它類(lèi)型的任何元素,它會(huì)在編譯時(shí)報(bào)錯(cuò)。這避免了在運(yùn)行時(shí)出現(xiàn)ClassCastException,因?yàn)槟銓?huì)在編譯時(shí)得到報(bào)錯(cuò)信息。泛型也使得代碼整潔,我們不需要使用顯式轉(zhuǎn)換和instanceOf操作符。它也給運(yùn)行時(shí)帶來(lái)好處,因?yàn)椴粫?huì)產(chǎn)生類(lèi)型檢查的字節(jié)碼指令。
答:Map接口提供三個(gè)集合視圖:
(1)Set keyset():返回map中包含的所有key的一個(gè)Set視圖。集合是受map支持的,map的變化會(huì)在集合中反映出來(lái),反之亦然。當(dāng)一個(gè)迭代器正在遍歷一個(gè)集合時(shí),若map被修改了(除迭代器自身的移除操作以外),迭代器的結(jié)果會(huì)變?yōu)槲炊x。集合支持通過(guò)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中反映出來(lái),反之亦然。當(dāng)一個(gè)迭代器正在遍歷一個(gè)collection時(shí),若map被修改了(除迭代器自身的移除操作以外),迭代器的結(jié)果會(huì)變?yōu)槲炊x。集合支持通過(guò)Iterator的Remove、Set.remove、removeAll、retainAll和clear操作進(jìn)行元素移除,從map中移除對(duì)應(yīng)的映射。它不支持add和addAll操作。
(3)Set
以上就是今天為大家整理的java集合面試題,題目都是比較基礎(chǔ)的,也是在面試時(shí)有很大幾率出現(xiàn)的,所以大家務(wù)必要掌握這10道java集合面試題中所包含的知識(shí)點(diǎn),遇到不會(huì)的模糊內(nèi)容,要及時(shí)通過(guò)專(zhuān)業(yè)書(shū)或者java視頻教程的方式來(lái)搞懂不明白的地方,當(dāng)然要通過(guò)一家大型互聯(lián)網(wǎng)公司的面試,光靠java集合面試題是不夠的,動(dòng)力節(jié)點(diǎn)匯總的史上最全的java面試題或許能給你相應(yīng)的幫助,希望大家可以順利通過(guò)面試,
相關(guān)閱讀
0基礎(chǔ) 0學(xué)費(fèi) 15天面授
有基礎(chǔ) 直達(dá)就業(yè)
業(yè)余時(shí)間 高薪轉(zhuǎn)行
工作1~3年,加薪神器
工作3~5年,晉升架構(gòu)
提交申請(qǐng)后,顧問(wèn)老師會(huì)電話(huà)與您溝通安排學(xué)習(xí)
初級(jí) 202925
初級(jí) 203221
初級(jí) 202629
初級(jí) 203743