国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

首頁 > Java > Java面試題 > 正文

java高頻率基礎(chǔ)面試題——集合框架部分

王林
發(fā)布: 2020-08-28 15:49:29
轉(zhuǎn)載
1811人瀏覽過

java高頻率基礎(chǔ)面試題——集合框架部分

1、ArrayList和Vector的區(qū)別

(更多面試題推薦:java面試題及答案

這兩個(gè)類都實(shí)現(xiàn)了List接口(List接口繼承了Collection接口),他們都是有序集合,即存儲在這兩個(gè)集合中的元素的位置都是有順序的,相當(dāng)于一種動態(tài)的數(shù)組,我們以后可以按位置索引號取出某個(gè)元素,并且其中的數(shù)據(jù)是允許重復(fù)的,這是與HashSet之類的集合的最大不同處,HashSet之類的集合不可以按索引號去檢索其中的元素,也不允許有重復(fù)的元素。

ArrayList與Vector的區(qū)別主要包括兩個(gè)方面:

立即學(xué)習(xí)Java免費(fèi)學(xué)習(xí)筆記(深入)”;

(1)同步性:

Vector是線程安全的,也就是說是它的方法之間是線程同步的,而ArrayList是線程序不安全的,它的方法之間是線程不同步的。如果只有一個(gè)線程會訪問到集合,那最好是使用ArrayList,因?yàn)樗豢紤]線程安全,效率會高些;如果有多個(gè)線程會訪問到集合,那最好是使用Vector,因?yàn)椴恍枰覀冏约涸偃タ紤]和編寫線程安全的代碼。

(2)數(shù)據(jù)增長:

ArrayList與Vector都有一個(gè)初始的容量大小,當(dāng)存儲進(jìn)它們里面的元素的個(gè)數(shù)超過了容量時(shí),就需要增加ArrayList與Vector的存儲空間,每次要增加存儲空間時(shí),不是只增加一個(gè)存儲單元,而是增加多個(gè)存儲單元,每次增加的存儲單元的個(gè)數(shù)在內(nèi)存空間利用與程序效率之間要取得一定的平衡。

Vector默認(rèn)增長為原來兩倍,而ArrayList的增長策略在文檔中沒有明確規(guī)定(從源代碼看到的是增長為原來的1.5倍)。ArrayList與Vector都可以設(shè)置初始的空間大小,Vector還可以設(shè)置增長的空間大小,而ArrayList沒有提供設(shè)置增長空間的方法。

總結(jié):即Vector增長原來的一倍,ArrayList增加原來的0.5倍。

2、HashMap和Hashtable的區(qū)別

HashMap是Hashtable的輕量級實(shí)現(xiàn)(非線程安全的實(shí)現(xiàn)),他們都完成了Map接口,主要區(qū)別在于HashMap允許空(null)鍵值(key),由于非線程安全,在只有一個(gè)線程訪問的情況下,效率要高于Hashtable。

HashMap允許將null作為一個(gè)entry的key或者value,而Hashtable不允許。

HashMap把Hashtable的contains方法去掉了,改成containsvalue和containsKey。因?yàn)閏ontains方法容易讓人引起誤解。

Hashtable繼承自Dictionary類,而HashMap是Java1.2引進(jìn)的Map interface的一個(gè)實(shí)現(xiàn)。

最大的不同是,Hashtable的方法是Synchronize的,而HashMap不是,在多個(gè)線程訪問Hashtable時(shí),不需要自己為它的方法實(shí)現(xiàn)同步,而HashMap就必須為之提供同步。

就HashMap與HashTable主要從三方面來說。

(1)歷史原因:Hashtable是基于陳舊的Dictionary類的,HashMap是Java 1.2引進(jìn)的Map接口的一個(gè)實(shí)現(xiàn)

(2)同步性:Hashtable是線程安全的,也就是說是同步的,而HashMap是線程序不安全的,不是同步的

(3)值:只有HashMap可以讓你將空值作為一個(gè)表的條目的key或value

(學(xué)習(xí)視頻推薦:java課程

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

一個(gè)是存儲單列數(shù)據(jù)的集合,另一個(gè)是存儲鍵和值這樣的雙列數(shù)據(jù)的集合,List中存儲的數(shù)據(jù)是有順序,并且允許重復(fù);Map中存儲的數(shù)據(jù)是沒有順序的,其鍵是不能重復(fù)的,它的值是可以有重復(fù)的。

4、List,Set, Map是否繼承自Collection接口?

List,Set是,Map不是?

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

(這樣的題比較考水平,兩個(gè)方面的水平:一是要真正明白這些內(nèi)容,二是要有較強(qiáng)的總結(jié)和表述能力。)

首先,List與Set具有相似性,它們都是單列元素的集合,所以,它們有一個(gè)共同的父接口,叫Collection。Set里面不允許有重復(fù)的元素,即不能有兩個(gè)相等(注意,不是僅僅是相同)的對象,即假設(shè)Set集合中有了一個(gè)A對象,現(xiàn)在我要向Set集合再存入一個(gè)B對象,但B對象與A對象equals相等,則B對象存儲不進(jìn)去。

所以,Set集合的add方法有一個(gè)boolean的返回值,當(dāng)集合中沒有某個(gè)元素,此時(shí)add方法可成功加入該元素時(shí),則返回true,當(dāng)集合含有與某個(gè)元素equals相等的元素時(shí),此時(shí)add方法無法加入該元素,返回結(jié)果為false。Set取元素時(shí),不能細(xì)說要取第幾個(gè),只能以Iterator接口取得所有的元素,再逐一遍歷各個(gè)元素。

List表示有先后順序的集合,注意,不是那種按年齡、按大小、按價(jià)格之類的排序。當(dāng)我們多次調(diào)用add(Obje)方法時(shí),每次加入的對象就像火車站買票有排隊(duì)順序一樣,按先來后到的順序排序。有時(shí)候,也可以插隊(duì),即調(diào)用add(intindex,Obj e)方法,就可以指定當(dāng)前對象在集合中的存放位置。

一個(gè)對象可以被反復(fù)存儲進(jìn)List中,每調(diào)用一次add方法,這個(gè)對象就被插入進(jìn)集合中一次,其實(shí),并不是把這個(gè)對象本身存儲進(jìn)了集合中,而是在集合中用一個(gè)索引變量指向這個(gè)對象,當(dāng)這個(gè)對象被add多次時(shí),即相當(dāng)于集合中有多個(gè)索引指向了這個(gè)對象,如圖x所示。List除了可以用Iterator接口取得所有的元素,再逐一遍歷各個(gè)元素之外,還可以調(diào)用get(index i)來明確說明取第幾個(gè)。

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

另外,也可以獲得所有的key的結(jié)合,還可以獲得所有的value的結(jié)合,還可以獲得key和value組合成的Map.Entry對象的集合。

List以特定次序來持有元素,可有重復(fù)元素。Set無法擁有重復(fù)元素,內(nèi)部排序。Map保存key-value值,value可多值。

6、說出ArrayList,Vector,LinkedList的存儲性能和特性

ArrayList和Vector都是使用數(shù)組方式存儲數(shù)據(jù),此數(shù)組元素?cái)?shù)大于實(shí)際存儲的數(shù)據(jù)以便增加和插入元素,它們都允許直接按序號索引元素,但是插入元素要涉及數(shù)組元素移動等內(nèi)存操作,所以索引數(shù)據(jù)快而插入數(shù)據(jù)慢,Vector由于使用了synchronized方法(線程安全),通常性能上較ArrayList差。而LinkedList使用雙向鏈表實(shí)現(xiàn)存儲,按序號索引數(shù)據(jù)需要進(jìn)行前向或后向遍歷,索引就變慢了,但是插入數(shù)據(jù)時(shí)只需要記錄本項(xiàng)的前后項(xiàng)即可,所以插入速度較快。

LinkedList也是線程不安全的,LinkedList提供了一些方法,使得LinkedList可以被當(dāng)作堆棧和隊(duì)列來使用。

7、去掉一個(gè)Vector集合中重復(fù)的元素

Vector newVector = new Vector();
For (int i=0;i<vector.size();i++)
{
Object obj = vector.get(i);
       if(!newVector.contains(obj);
             newVector.add(obj);
}
登錄后復(fù)制

還有一種簡單的方式,利用了Set不允許重復(fù)元素:

HashSetset = new HashSet(vector);

8、Collection和Collections的區(qū)別。

Collection是集合類的上級接口,繼承他的接口主要有Set和List.

Collections是針對集合類的一個(gè)幫助類,他提供一系列靜態(tài)方法實(shí)現(xiàn)對各種集合的搜索、排序、線程安全化等操作。

9、Set里的元素是不能重復(fù)的,那么用什么方法來區(qū)分重復(fù)與否呢?是用==還是equals()?它們有何區(qū)別?

Set里的元素是不能重復(fù)的,元素重復(fù)與否是使用equals()方法進(jìn)行判斷的。

==和equal區(qū)別也是考爛了的題,這里說一下:

==操作符專門用來比較兩個(gè)變量的值是否相等,也就是用于比較變量所對應(yīng)的內(nèi)存中所存儲的數(shù)值是否相同,要比較兩個(gè)基本類型的數(shù)據(jù)或兩個(gè)引用變量是否相等,只能用==操作符。

equals方法是用于比較兩個(gè)獨(dú)立對象的內(nèi)容是否相同,就好比去比較兩個(gè)人的長相是否相同,它比較的兩個(gè)對象是獨(dú)立的。

比如:兩條new語句創(chuàng)建了兩個(gè)對象,然后用a/b這兩個(gè)變量分別指向了其中一個(gè)對象,這是兩個(gè)不同的對象,它們的首地址是不同的,即a和b中存儲的數(shù)值是不相同的,所以,表達(dá)式a==b將返回false,而這兩個(gè)對象中的內(nèi)容是相同的,所以,表達(dá)式a.equals(b)將返回true。

(相關(guān)教程推薦:java入門教程

10、你所知道的集合類都有哪些?主要方法?

最常用的集合類是 List 和 Map。 List的具體實(shí)現(xiàn)包括 ArrayList和 Vector,它們是可變大小的列表,比較適合構(gòu)建、存儲和操作任何類型對象的元素列表。 List適用于按數(shù)值索引訪問元素的情形。

Map 提供了一個(gè)更通用的元素存儲方法。 Map集合類用于存儲元素對(稱作"鍵"和"值"),其中每個(gè)鍵映射到一個(gè)值。

它們都有增刪改查的方法。

對于set,大概的方法是add,remove, contains等

對于map,大概的方法就是put,remove,contains等

List類會有g(shù)et(int index)這樣的方法,因?yàn)樗梢园错樞蛉≡兀鴖et類中沒有g(shù)et(int index)這樣的方法。List和set都可以迭代出所有元素,迭代時(shí)先要得到一個(gè)iterator對象,所以,set和list類都有一個(gè)iterator方法,用于返回那個(gè)iterator對象。map可以返回三個(gè)集合,一個(gè)是返回所有的key的集合,另外一個(gè)返回的是所有value的集合,再一個(gè)返回的key和value組合成的EntrySet對象的集合,map也有g(shù)et方法,參數(shù)是key,返回值是key對應(yīng)的value,這個(gè)自由發(fā)揮,也不是考記方法的能力,這些編程過程中會有提示,結(jié)合他們?nèi)叩牟煌f一下用法就行。

以上就是java高頻率基礎(chǔ)面試題——集合框架部分的詳細(xì)內(nèi)容,更多請關(guān)注php中文網(wǎng)其它相關(guān)文章!

java速學(xué)教程(入門到精通)
java速學(xué)教程(入門到精通)

java怎么學(xué)習(xí)?java怎么入門?java在哪學(xué)?java怎么學(xué)才快?不用擔(dān)心,這里為大家提供了java速學(xué)教程(入門到精通),有需要的小伙伴保存下載就能學(xué)習(xí)啦!

下載
來源:csdn網(wǎng)
本文內(nèi)容由網(wǎng)友自發(fā)貢獻(xiàn),版權(quán)歸原作者所有,本站不承擔(dān)相應(yīng)法律責(zé)任。如您發(fā)現(xiàn)有涉嫌抄襲侵權(quán)的內(nèi)容,請聯(lián)系admin@php.cn
最新問題
開源免費(fèi)商場系統(tǒng)廣告
最新下載
更多>
網(wǎng)站特效
網(wǎng)站源碼
網(wǎng)站素材
前端模板
關(guān)于我們 免責(zé)申明 意見反饋 講師合作 廣告合作 最新更新
php中文網(wǎng):公益在線php培訓(xùn),幫助PHP學(xué)習(xí)者快速成長!
關(guān)注服務(wù)號 技術(shù)交流群
PHP中文網(wǎng)訂閱號
每天精選資源文章推送
PHP中文網(wǎng)APP
隨時(shí)隨地碎片化學(xué)習(xí)
PHP中文網(wǎng)抖音號
發(fā)現(xiàn)有趣的

Copyright 2014-2025 http://m.miracleart.cn/ All Rights Reserved | php.cn | 湘ICP備2023035733號