無論是需要招聘的企業(yè)人員還是正在求職或者打算跳槽的程序員,今天這篇都值得一看。這里整合了20個(gè)常見的Java集合框架面試題目,以及對應(yīng)的nice的答案。面試這關(guān)至關(guān)重要,合適的問題和巧妙的回答,是企業(yè)和應(yīng)聘者相互了解和有效溝通的關(guān)鍵,下面就一起來看看這些題目和答案。
1.為什么Map接口不繼承Collection 接口?
- Set是無序集合,并且不允許重復(fù)的元素
- List是有序的集合,并且允許重復(fù)的元素
- 而Map是鍵值對
- 它被視為是鍵的set和值的set的組合
- Map被設(shè)計(jì)為鍵值對的集合,所以不需要繼承Collection 接口
2.HashMap和Hashtable之間的區(qū)別?
- 同步或線程安全
- Null鍵和Null值
- 迭代值
- 默認(rèn)容量大小
3.comparable 和 comparator的不同之處?
- comparable接口實(shí)際上是出自java.lang包
- 它有一個(gè) compareTo(Object obj)方法來將objects排序
- comparator接口實(shí)際上是出自 java.util 包
- 它有一個(gè)compare(Object obj1, Object obj2)方法來將objects排序
4.如何對Object的list排序?
- 對objects數(shù)組進(jìn)行排序,我們可以用Arrays.sort()方法
- 如果要對objects的集合進(jìn)行排序,需要使用Collections.sort()方法
5. fail-fast 與 fail-safe 之間的區(qū)別?
- Fail fast快速地報(bào)告任何的failure。無論何時(shí)任何一個(gè)問題都會(huì)引發(fā) fail fast系統(tǒng)fails
- 在Java Fail fast 迭代器中,迭代objects集合有時(shí)會(huì)出現(xiàn)并發(fā)修改異常,出現(xiàn)這種情況有2個(gè)原因
- 如果一個(gè)線程正在迭代一個(gè)集合,而另一個(gè)線程同時(shí)試圖修改這個(gè)集合
- 在調(diào)用remove()方法后,如何我們還試圖去修改集合object
6. Iterator、ListIterator 和 Enumeration的區(qū)別?
- Enumeration接口在Java1.2版本開始有,所以Enumeration是合法規(guī)范的接口
- Enumeration使用elements()方法
- Iterator對所有Java集合類都有實(shí)現(xiàn)
- Iterator使用iterator方法
- Iterator只能往一個(gè)方向前進(jìn)
- ListIterator僅僅對List類型的類實(shí)現(xiàn)了
- ListIterator使用listIterator()方法
7.Java 中 Set 與 List 有什么不同?
- Set是一個(gè)不允許重復(fù)元素存在的集合
- Set沒有索引
- Set僅僅允許一個(gè)null值
- Set有類:HashSet、LinkedHashMap、TreeSet
- List有索引
- List允許N個(gè)null值
- List可以按插入順序顯示
- List有類:Vector、ArrayList、LinkedList
8. arraylist 與 vector 的區(qū)別?
- Vector 在Java的第一個(gè)版本就引入了,也就是說vector是一個(gè)合法規(guī)范的類
- ArrayList在Java1.2版本引入的,是Java 集合框架的組成部分
- Vector是同步的
- ArrayList是不同步的
9.什么類實(shí)現(xiàn)了List接口?
- ArrayList
- LinkedList
- Vector
10.什么類實(shí)現(xiàn)了Set接口?
- HashSet
- LinkedHashSet
- TreeSet
11.如何保證一個(gè)集合線程安全?
- Vector, Hashtable, Properties 和 Stack 都是同步的類,所以它們都線程安全的,可以被使用在多線程環(huán)境中
- 使用Collections.synchronizedList(list)) 方法,可以保證list類是線程安全的
- 使用java.util.Collections.synchronizedSet()方法可以保證set類是線程安全的
12.是否可以往 TreeSet 或者 HashSet 中添加 null 元素?
- 可以往 hashset 中添加一個(gè) null
- TreeSet 也允許一個(gè) null值
13.解釋下Collection的接口繼承關(guān)系?
14.Iterator符合哪個(gè)設(shè)計(jì)模式?
15.HashSet 實(shí)現(xiàn)了哪個(gè)數(shù)據(jù)結(jié)構(gòu)?
- HashSet 內(nèi)部實(shí)現(xiàn)了hashmap
16.為什么 Collection 不能繼承 Cloneable 和 Serializable?
- List和Set唯一繼承 Collection 接口
- SortedMap 繼承了 Map 接口
17.hashCode() 和 equals() 方法的重要性?如何在Java中使用它們?
- hashCode() 和 equals() 方法定義在”object”類中
- 如果equals() 方法在比較2個(gè)對象時(shí)返回true,那么hashCode()的返回值必須得一樣
18.array 和 arraylist 的區(qū)別?
- Array類似object集合類型,大小固定
- Arraylist是同質(zhì)和異質(zhì)元素的集合
19.什么是 Properties 類?
- Properties 是Hashtable的子類。它被用于維護(hù)值的list,其中它們的鍵、值都是String類型
20.如何將一個(gè)字符串轉(zhuǎn)換為arraylist?
- 使用 arrayList.toArray() 方法
可能對于不同的朋友來說,以上內(nèi)容包含的不是很全面,歡迎點(diǎn)擊原文相互學(xué)習(xí)交流。
閱讀原文
標(biāo)簽:
Java應(yīng)用程序框架程序員
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請郵件反饋至chenjj@fc6vip.cn