開篇介紹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。
其中:
在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有什麼區別?
若是以爲文章不錯,歡迎關注、點贊、收藏,大家的支持是我創做的動力,感謝你們。
若是文章寫的有問題,請不要吝嗇,歡迎留言指出,我會及時覈查修改。
若是你還想更加深刻的瞭解我,能夠微信搜索「Java極客思惟」進行關注。天天8:00準時推送技術文章,讓你的上班路不在孤獨,並且每個月還有送書活動,助你提高硬實力!