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

開篇介紹java

你們好,公衆號【Java極客思惟】近期會整理一些Java高頻面試題分享給小夥伴,也但願看到的小夥伴在找工做過程當中可以用獲得!本章節主要針對Java一些集合高頻面試題進行分享。面試

Q:數據庫

集合的體系有哪些?數組

單列集合:安全

雙列集合:微信

Q1:多線程

Collection 和 Collections 異同區別是什麼?工具

Collection:spa

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準時推送技術文章,讓你的上班路不在孤獨,並且每個月還有送書活動,助你提高硬實力!

相關文章
相關標籤/搜索