亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

首頁(yè) Java Java面試題 java高頻率基礎(chǔ)面試題-集合框架部分

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

Aug 28, 2020 pm 03:49 PM
java 框架 集合 面試題

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

1、ArrayList與Vector的差異

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

這兩個(gè)類別都實(shí)作了List介面(List介面繼承了Collection介面),他們都是有序集合,即儲(chǔ)存在這兩個(gè)集合中的元素的位置都是有順序的,相當(dāng)於一種動(dòng)態(tài)的陣列,我們以後可以按位置索引號(hào)取出某個(gè)元素,並且其中的資料是允許重複的,這是與HashSet之類的集合的最大不同處,HashSet之類的集合不可以按索引號(hào)去檢索其中的元素,也不允許有重複的元素。

ArrayList與Vector的差異主要包含兩個(gè)面向:

(1)同步性:

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

(2)資料成長(zhǎng):

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

Vector預(yù)設(shè)成長(zhǎng)為原來(lái)兩倍,而ArrayList的成長(zhǎng)策略在文件中沒(méi)有明確規(guī)定(從原始碼看到的是成長(zhǎng)為原來(lái)的1.5倍)。 ArrayList與Vector都可以設(shè)定初始的空間大小,Vector還可以設(shè)定成長(zhǎng)的空間大小,而ArrayList並沒(méi)有提供設(shè)定成長(zhǎng)空間的方法。

總結(jié):也就是Vector成長(zhǎng)原來(lái)的一倍,ArrayList增加原來(lái)的0.5倍。

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

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

HashMap允許將null當(dāng)作一個(gè)entry的key或value,而Hashtable不允許。

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

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

最大的不同是,Hashtable的方法是Synchronize的,而HashMap不是,在多個(gè)執(zhí)行緒存取Hashtable時(shí),不需要自己為它的方法實(shí)作同步,而HashMap就必須為之提供同步。

就HashMap與HashTable主要從三方面來(lái)說(shuō)。

(1)歷史原因:Hashtable是基於陳舊的Dictionary類別的,HashMap是Java 1.2引進(jìn)的Map介面的一個(gè)實(shí)作

(2)同步性:Hashtable是執(zhí)行緒安全的,也就是說(shuō)是同步的,而HashMap是線程式不安全的,不是同步的

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

(學(xué)習(xí)影片推薦:java課程

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

一個(gè)是儲(chǔ)存單列資料的集合,另一個(gè)是儲(chǔ)存鍵和值這樣的雙列資料的集合,List中儲(chǔ)存的資料是有順序,並且允許重複;Map中儲(chǔ)存的資料是沒(méi)有順序的,其鍵是不能重複的,它的值是可以有重複的。

4、List,Set, Map是否繼承自Collection介面?

List,Set是,Map不是?

5、List、Map、Set三個(gè)接口,存取元素時(shí),各有什麼特色?

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

首先,List與Set具有相似性,它們都是單列元素的集合,所以,它們有一個(gè)共同的父接口,叫做Collection。 Set裡面不允許有重複的元素,也就是不能有兩個(gè)相等(注意,不是僅僅是相同)的對(duì)象,也就是假設(shè)Set集合中有了一個(gè)A對(duì)象,現(xiàn)在我要向Set集合再存入一個(gè)B對(duì)象,但B物件與A物件equals相等,則B物件儲(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í),不能細(xì)說(shuō)要取第幾個(gè),只能以Iterator介面取得所有的元素,再逐一遍歷各個(gè)元素。

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

一個(gè)物件可以被重複儲(chǔ)存進(jìn)List中,每呼叫一次add方法,這個(gè)物件就被插入進(jìn)集合中一次,其實(shí),並不是把這個(gè)物件本身儲(chǔ)存進(jìn)了集合中,而是在集合中用一個(gè)索引變數(shù)指向這個(gè)對(duì)象,當(dāng)這個(gè)對(duì)像被add多次時(shí),即相當(dāng)於集合中有多個(gè)索引指向了這個(gè)對(duì)象,如圖x所示。 List除了可以用Iterator介面取得所有的元素,再逐一遍歷各個(gè)元素之外,還可以呼叫g(shù)et(index i)來(lái)明確說(shuō)明取第幾個(gè)。

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

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

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

6、說(shuō)出ArrayList,Vector,LinkedList的儲(chǔ)存效能和特性

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

LinkedList也是線程不安全的,LinkedList提供了一些方法,使得LinkedList可以被當(dāng)作堆疊和佇列來(lái)使用。

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

Vector newVector = new Vector();
For (int i=0;i<vector.size();i++)
{
Object obj = vector.get(i);
       if(!newVector.contains(obj);
             newVector.add(obj);
}

還有一個(gè)簡(jiǎn)單的方式,利用了Set不允許重複元素:

HashSetset = new HashSet(vector );

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

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

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

9、Set裡的元素是不能重複的,那麼用什麼方法來(lái)區(qū)分重複與否呢?是用==還是equals()?它們有何區(qū)別?

Set裡的元素是不能重複的,元素重複與否是使用equals()方法來(lái)判斷的。

==和equal差異也是考爛了的題,這裡說(shuō)一下:

==運(yùn)算子專門用來(lái)比較兩個(gè)變數(shù)的值是否相等,也就是用來(lái)比較變數(shù)所對(duì)應(yīng)的記憶體中所儲(chǔ)存的數(shù)值是否相同,要比較兩個(gè)基本型別的資料或兩個(gè)引用變數(shù)是否相等,只能用==運(yùn)算子。

equals方法是用來(lái)比較兩個(gè)獨(dú)立物件的內(nèi)容是否相同,就好比去比較兩個(gè)人的長(zhǎng)相是否相同,它比較的兩個(gè)物件是獨(dú)立的。

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

(相關(guān)教學(xué)推薦:java入門教學(xué)

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

最常用的集合類別是 List 和 Map。 List的具體實(shí)作包括 ArrayList和 Vector,它們是可變大小的列表,比較適合建構(gòu)、儲(chǔ)存和操作任何類型物件的元素列表。 List適用於以數(shù)值索引存取元素的情況。

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

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

對(duì)於set,大概的方法是add,remove, contains等

對(duì)於map,大概的方法就是put,remove,contains等

List類別會(huì)有g(shù)et(int index)這樣的方法,因?yàn)樗梢砸佬蛉≡?,而set類別中沒(méi)有g(shù)et(int index)這樣的方法。 List和set都可以迭代出所有元素,迭代時(shí)先要得到一個(gè)iterator對(duì)象,所以,set和list類別都有一個(gè)iterator方法,用來(lái)傳回那個(gè)iterator物件。 map可以回傳三個(gè)集合,一個(gè)是傳回所有的key的集合,另一個(gè)回傳的是所有value的集合,再一個(gè)回傳的key和value組合成的EntrySet物件的集合,map也有g(shù)et方法,參數(shù)是key,回傳值是key對(duì)應(yīng)的value,這個(gè)自由發(fā)揮,也不是考記方法的能力,這些程式設(shè)計(jì)過(guò)程中會(huì)有提示,結(jié)合他們?nèi)叩牟煌f(shuō)一下用法就行。

以上是java高頻率基礎(chǔ)面試題-集合框架部分的詳細(xì)內(nèi)容。更多資訊請(qǐng)關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

本網(wǎng)站聲明
本文內(nèi)容由網(wǎng)友自願(yuàn)投稿,版權(quán)歸原作者所有。本站不承擔(dān)相應(yīng)的法律責(zé)任。如發(fā)現(xiàn)涉嫌抄襲或侵權(quán)的內(nèi)容,請(qǐng)聯(lián)絡(luò)admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費(fèi)脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅(qū)動(dòng)的應(yīng)用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費(fèi)的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費(fèi)的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強(qiáng)大的PHP整合開(kāi)發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺(jué)化網(wǎng)頁(yè)開(kāi)發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級(jí)程式碼編輯軟體(SublimeText3)

熱門話題

Laravel 教程
1597
29
PHP教程
1488
72
VSCODE設(shè)置。 JSON位置 VSCODE設(shè)置。 JSON位置 Aug 01, 2025 am 06:12 AM

settings.json文件位於用戶級(jí)或工作區(qū)級(jí)路徑,用於自定義VSCode設(shè)置。 1.用戶級(jí)路徑:Windows為C:\Users\\AppData\Roaming\Code\User\settings.json,macOS為/Users//Library/ApplicationSupport/Code/User/settings.json,Linux為/home//.config/Code/User/settings.json;2.工作區(qū)級(jí)路徑:項(xiàng)目根目錄下的.vscode/settings

如何使用JDBC處理Java的交易? 如何使用JDBC處理Java的交易? Aug 02, 2025 pm 12:29 PM

要正確處理JDBC事務(wù),必須先關(guān)閉自動(dòng)提交模式,再執(zhí)行多個(gè)操作,最後根據(jù)結(jié)果提交或回滾;1.調(diào)用conn.setAutoCommit(false)以開(kāi)始事務(wù);2.執(zhí)行多個(gè)SQL操作,如INSERT和UPDATE;3.若所有操作成功則調(diào)用conn.commit(),若發(fā)生異常則調(diào)用conn.rollback()確保數(shù)據(jù)一致性;同時(shí)應(yīng)使用try-with-resources管理資源,妥善處理異常並關(guān)閉連接,避免連接洩漏;此外建議使用連接池、設(shè)置保存點(diǎn)實(shí)現(xiàn)部分回滾,並保持事務(wù)盡可能短以提升性能。

在Java的掌握依賴注入春季和Guice 在Java的掌握依賴注入春季和Guice Aug 01, 2025 am 05:53 AM

依賴性(di)IsadesignpatternwhereObjectsReceivedenciesenciesExtern上,推廣looseSecouplingAndEaseerTestingThroughConstructor,setter,orfieldInjection.2.springfraMefringframeWorkSannotationsLikeLikeLike@component@component,@component,@service,@autowiredwithjava-service和@autowiredwithjava-ligatiredwithjava-lase-lightike

如何使用Java的日曆? 如何使用Java的日曆? Aug 02, 2025 am 02:38 AM

使用java.time包中的類替代舊的Date和Calendar類;2.通過(guò)LocalDate、LocalDateTime和LocalTime獲取當(dāng)前日期時(shí)間;3.使用of()方法創(chuàng)建特定日期時(shí)間;4.利用plus/minus方法不可變地增減時(shí)間;5.使用ZonedDateTime和ZoneId處理時(shí)區(qū);6.通過(guò)DateTimeFormatter格式化和解析日期字符串;7.必要時(shí)通過(guò)Instant與舊日期類型兼容;現(xiàn)代Java中日期處理應(yīng)優(yōu)先使用java.timeAPI,它提供了清晰、不可變且線

了解Java虛擬機(jī)(JVM)內(nèi)部 了解Java虛擬機(jī)(JVM)內(nèi)部 Aug 01, 2025 am 06:31 AM

TheJVMenablesJava’s"writeonce,runanywhere"capabilitybyexecutingbytecodethroughfourmaincomponents:1.TheClassLoaderSubsystemloads,links,andinitializes.classfilesusingbootstrap,extension,andapplicationclassloaders,ensuringsecureandlazyclassloa

Google Chrome無(wú)法打開(kāi)本地文件 Google Chrome無(wú)法打開(kāi)本地文件 Aug 01, 2025 am 05:24 AM

ChromecanopenlocalfileslikeHTMLandPDFsbyusing"Openfile"ordraggingthemintothebrowser;ensuretheaddressstartswithfile:///;2.SecurityrestrictionsblockAJAX,localStorage,andcross-folderaccessonfile://;usealocalserverlikepython-mhttp.server8000tor

比較Java框架:Spring Boot vs Quarkus vs Micronaut 比較Java框架:Spring Boot vs Quarkus vs Micronaut Aug 04, 2025 pm 12:48 PM

前形式攝取,quarkusandmicronautleaddueTocile timeProcessingandGraalvSupport,withquarkusoftenpernperforminglightbetterine nosserless notelless centarios.2。

了解網(wǎng)絡(luò)端口和防火牆 了解網(wǎng)絡(luò)端口和防火牆 Aug 01, 2025 am 06:40 AM

NetworkPortSandFireWallsworkTogetHertoEnableCommunication whereSeringSecurity.1.NetWorkPortSareVirtualendPointSnumbered0-655 35,with-Well-with-Newonportslike80(HTTP),443(https),22(SSH)和25(smtp)sindiessingspefificservices.2.portsoperateervertcp(可靠,c

See all articles