天天看點

Java常見面試題:Set集合

Set集合

對于Set集合應該有一個基礎的認識:Set集合本身隻定義有不允許重複的存儲。Set接口完整的繼承了Collection接口,也就是說Set集合幾乎與Collection的操作是對等的。

從實際的開發來看,大量使用到Set集合的架構隻有Hibernate;還有一些批量删除的功能也是通過Set集合實作的,因為大部分情況下優先考慮的還是List接口。

對于Set接口最麻煩的問題不在于它的接口特點而在于子類特點,如果從開發者的角度來看,整個Set接口中有以下三個可能見到的子類:

1. HashSet:無序存放

(1)打開源代碼之後發現整個HashSet類裡面存在有一個HashMap,但是很明顯,沒使用這個Map的Value,隻使用了Key(HashMap的主要特點是key不能重複);

(2)在HashSet類執行add()方法的時候發現是利用了Map接口中的put()實作的;

(3)在整個存儲過程之中存在有一個hashCode()的使用;

(4)在内部的Node類處理時依然使用了equals()判斷key與value内容。

2.TreeSet:發現使用的是Map集合(SortedMap接口子類);

(1) 裡面存放的是TreeMap,TreeMap的特點在于所有的key都是可以排序的,排序的依據是Comparable(往往會忽略掉Comparator);

(2) 在TreeMap之中對于大小的關系判斷強制使用了Comparable接口中的compareTo()完成。

3.LinkedHashSet:如果這個時候需要進行連續的儲存(FIFO),就可以使用另外一個子類。它之是以可以進行順序儲存,是因為在進行存儲的時候采用的是連結清單形式完成的。

範例:HashSet子類

Java常見面試題:Set集合
Java常見面試題:Set集合
Java常見面試題:Set集合
Java常見面試題:Set集合
Java常見面試題:Set集合

這個時候之是以沒有區分重複元素,是因為這個子類裡面并沒有提供一個與之相符合的hashCode()和equals()方法。

範例:HashSet實作重複元素的不儲存

Java常見面試題:Set集合
Java常見面試題:Set集合
Java常見面試題:Set集合
Java常見面試題:Set集合
Java常見面試題:Set集合
Java常見面試題:Set集合
Java常見面試題:Set集合
Java常見面試題:Set集合
Java常見面試題:Set集合

如果希望儲存的為增加順序,那麼可以更換子類。

Java常見面試題:Set集合

TreeSet中儲存的資料都必須是Comparable接口的子類。

範例:使用TreeSet

Java常見面試題:Set集合
Java常見面試題:Set集合
Java常見面試題:Set集合
Java常見面試題:Set集合
Java常見面試題:Set集合
Java常見面試題:Set集合
Java常見面試題:Set集合
Java常見面試題:Set集合
Java常見面試題:Set集合
Java常見面試題:Set集合
Java常見面試題:Set集合

TreeSet的使用必須依靠Comparable,在實際開發之中即便使用了集合儲存所有的查詢結果,也很少出現重複的判斷,因為資料表的主鍵不會重複。也就證明這個時候是否進行重複元素的判斷是沒有任何意義的。是以在開發裡面最常用的一個子類是HashSet,隻需要判斷重複,而且大部分使用的情況是裡面儲存的隻是String、Integer類,很少會去儲存一個對象。

更多專業知識,面試技巧就在阿裡雲開發者社群,持續更新中……

感謝浏覽~

本内容來源于

阿裡雲大學-Java面試技巧