Java面試專題-集合篇(2)

 

開篇介紹

大家好,公眾號【Java極客思維】近期會整理一些Java高頻面試題分享給小夥伴,也希望看到的小夥伴在找工作過程中能夠用得到!本章節主要針對Java一些集合高頻面試題進行分享。

 

Q:

集合的體系有哪些?

單列集合:

雙列集合:

 

Q1:

Collection 和 Collections 異同區別是什麼?

Collection:

java.util包下的介面,它是各類集合的父介面,繼承它的介面主要有Set 和 List;

 

Collections:

java.util包下的類,是針對集合的工具類,提供一系列靜態方法和對各種集合的搜索,排序,執行緒安全化等操作。

 

 

Q2:

ArrayList 和 Vector如何擴容?

ArrayList 和 Vector都有一個初始容量大小。
1. ArrayList是一個大小可改變的數組,當往ArrayList中添加更多的元素時,其大小會動態地增長。

內部元素可以直接通過get和set方法進行訪問,因為ArrayList本質上就是一個數組。

2. Vector和ArrayList添加更多元素時都會請求更大的空間。

3. Vector每次請求其大小的雙倍空間,ArrayList的size每次增長50%。

(Vector默認增加原來的一倍,ArrayList默認增加原來的0.5倍)

 

 

Q3:

List和Set的區別是什麼?

 

相同點:List 和 Set都繼承Collection介面。都是用來存儲一組相同類型的元素的集合。

區別:

List特點:元素有序放入,元素可以重複。

即有順序的存儲,先存入的對象排在集合前面。因此可以通過下標來取的集合內的元素。

 

Set特點:元素無序放入,元素不可重複。

即無順序的存儲,先存入的對象不一定排在集合前面。且不可以重複,相同元素在Set集合中只會存在一份。因為上一篇文章解釋了HashSet實現了HashCode的案例。所以,在一些場景下,可以用Set來去重。

 

 

Q4:

Set集合是如何保證元素不重複的?

Java的Set集合體系中,實現Set的方式主要分為兩大類:HashSet 和 TreeSet

其中:

1. HashSet是基於哈希表實現的,HashSet中數據是無序存放的,可以放入null值,但是有且只能放一個null,值都不可以重複,類似資料庫中的唯一約束。

2. TreeSet是二叉樹實現的,TreeSet中的數據是自動排序好的,不允許存放null值。

 

在HashSet中,基本的操作都是由HashMap底層實現的,因為HashSet底層使用HashMap存儲數據的(key-value)。當HashSet中添加對象時,首先計算對象的hashCode值,然後通過擾動計算和按位與的方式計算出這個元素的存儲位置,如果這個位置為空,表示還沒有對應的內容,就將對象添加進去;如果不為空,則會用equals方法來比較對象是否相等,相等則不會添加,不相等則找一個空位添加。

 

TreeSet底層是TreeMap的keySet()方法,而TreeMap是基於紅黑樹實現的,紅黑樹是一種平衡二叉查找樹,它能保證任何一個節點的左右 子樹的高度差不會超過較矮的那一棵的一倍。

 

TreeMap是按key排序的,元素在插入TreeSet時compareTo()方法會被調用,所以TreeSet中的元素要實現Comparable介面。TreeSet作為一種Set,它不允許出現重複元素。TreeSet使用compareTo()方法來判斷重複元素的。

 

 

Q5:

HashMap 和 HashTable有什麼區別?

 

1. HashMap允許鍵和值是null。而HashTable不允許鍵或值是null。

2. HashTable是執行緒同步的,而HashMap不是執行緒同步的。所以,HashTable適合在多執行緒環境中使用,而HashMap更適合於單執行緒的環境中使用。

3. HashMap提供了可供應用迭代的鍵的集合;因此,HashMap是快速失敗的。另一方面,HashTable提供了對鍵對的列舉(Enumeration)。

4. 由於HashTable繼承Dictionary類,但是這個類基本已經廢棄了,所以一般認為HashTable是一個遺留的類,在項目中不怎麼使用。

 


點關注、不迷路

如果覺得文章不錯,歡迎關注點贊收藏,你們的支援是我創作的動力,感謝大家。

如果文章寫的有問題,請不要吝嗇,歡迎留言指出,我會及時核查修改。

如果你還想更加深入的了解我,可以微信搜索「Java極客思維」進行關注。每天8:00準時推送技術文章,讓你的上班路不在孤獨,而且每月還有送書活動,助你提升硬實力!