【009期】JavaSE面試題(九):集合之Set

開篇介紹

你們好,我是Java面試題庫的提褲姐,今天這篇是面試系列的第九篇,主要總結了JavaSE中集合相關面試題,這篇是集系列的第二篇,主要講解Set集合,第三篇主要講解Map集合。在後續,會沿着第一篇開篇的知識線路一直總結下去,作到日更!若是我能作到百日百更,但願你也能夠跟着百日百刷,一百天養成一個好習慣。java

List和Set的區別?

List,Set都是繼承自Collection接口。都是用來存儲一組相同類型的元素的。面試

List特色:元素有放入順序,元素可重複 。
有順序,即先放入的元素排在前面。算法

Set特色:元素無放入順序,元素不可重複。
無順序,即先放入的元素不必定排在前面。不可重複,即相同元素在set中只會保留一份。因此,有些場景下,set能夠用來去重。數據庫

注意:set在元素插入時是要有必定的方法來判斷元素是否重複的。這個方法很重要,決定了set中能夠保存哪些元素。

Set如何保證元素不重複?

在Java的Set體系中,根據實現方式不一樣主要分爲兩大類。HashSetTreeSet
一、TreeSet 是二叉樹實現的,Treeset中的數據是自動排好序的,不容許放入null值
二、HashSet 是哈希表實現的,HashSet中的數據是無序的,能夠放入null,但只能放入一個null,二者中的值都不能重複,就如數據庫中惟一約束函數

在HashSet中,基本的操做都是有HashMap底層實現的,由於HashSet底層是用HashMap存儲數據的。當向HashSet中添加元素的時候,首先計算元素的hashcode值,而後經過擾動計算和按位與的方式計算出這個元素的存儲位置,若是這個位置位空,就將元素添加進去;若是不爲空,則用equals方法比較元素是否相等,相等就不添加,不然找一個空位添加。工具

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

TreeMap是按key排序的,元素在插入TreeSet時compareTo()方法要被調用,因此TreeSet中的元素要實現Comparable接口。TreeSet做爲一種Set,它不容許出現重複元素。TreeSet是用compareTo()來判斷重複元素的。對象

HashSet實現原理?

1.基於HashMap實現的,默認構造函數是構建一個初始容量爲16,負載因子爲0.75 的HashMap。封裝了一個 HashMap 對象來存儲全部的集合元素,全部放入 HashSet 中的集合元素實際上由 HashMap 的 key 來保存,而 HashMap 的 value 則存儲了一個 PRESENT,它是一個靜態的 Object 對象。排序

2.當咱們試圖把某個類的對象當成 HashMap的 key,或試圖將這個類的對象放入 HashSet 中保存時,重寫該類的equals(Object obj)方法和 hashCode() 方法,並且這兩個方法的返回值必須保持一致:當該類的兩個的 hashCode() 返回值相同時,它們經過 equals() 方法比較也應該返回 true。
一般來講,全部參與計算 hashCode() 返回值的關鍵屬性,都應該用於做爲 equals() 比較的標準。繼承

3.HashSet的其餘操做都是基於HashMap的。

如何取到Set集合中的第一個元素 ?

public static void main(String[] args) {
        Set set = new HashSet();
        set.add("tracy");
        set.add("hcx");
        set.add(123);
        set.add(4.5);
        System.out.println(set);//[4.5, hcx, tracy, 123]
        //第一種方法
        if(!set.isEmpty()){
            System.out.println(set.iterator().next());// 4.5
        }
        //第二種方法:將set集合轉換成list集合 取第一個
        List list = new ArrayList(set);
        System.out.println(list.get(0));// 4.5
    }

TreeMap和TreeSet在排序時如何比較元素?

TreeSet要求存放的對象所屬的類必須是實現Comparable接口,該接口提供了比較元素的compareTo方法,當插入元素時會調該方法比較元素的大小.TreeMap要求存放的鍵值對映射的鍵必須實現Comparable接口,從而根據鍵對元素進行排序。

Collection工具類中的sort方法如何比較元素?

Collections工具類的sort方法有兩種重載的形式,
第一種要求傳入的待排序容器中存放的對象比較實現Comparable接口以實現元素的比較,
第二種不強制性的要求容器中的元素必須可比較可是要求第二個參數,參數是Comparator接口的子類型(須要重寫compare方法實現元素的比較)至關一個臨時定義的排序規則,其實就是經過接口注入比較元素大小的算法,也是對回調模式的應用。

相關文章
相關標籤/搜索