免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開(kāi)通VIP
Java集合總結(jié):Set集合
set集合特點(diǎn):
1.無(wú)序性:set集合是無(wú)序的
2.不可重復(fù):set集合是不可重復(fù)的

HashSet詳解:
1、HashSet不能保證元素的順序;不可重復(fù);不是線程安全的;集合元素可以為 NULL;
2、其底層其實(shí)是一個(gè)數(shù)組,存在的意義是加快查詢速度。在一般的數(shù)組中,元素在數(shù)組中的索引位置是隨機(jī)的,元素的取值和元素的位置之間不存在確定的關(guān)系。
因此,在數(shù)組中查找特定的值時(shí),需要把查找值和一系列的元素進(jìn)行比較,此時(shí)的查詢效率依賴于查找過(guò)程中比較的次數(shù)。
HashSet 集合底層數(shù)組的索引和值有一個(gè)確定的關(guān)系:index=hash(value),那么只需要調(diào)用這個(gè)公式,就能快速的找到元素或者索引。
3、對(duì)于 HashSet: 如果兩個(gè)對(duì)象通過(guò) equals() 方法返回 true,這兩個(gè)對(duì)象的 hashCode 值也應(yīng)該相同。

HashSet的hashCode值
當(dāng)向HashSet集合中存入一個(gè)元素時(shí),HashSet會(huì)先判斷該對(duì)象的hashCode值,然后根據(jù)hashCode值決定該對(duì)象在HashSet中的存儲(chǔ)位置。
一、如果 hashCode 值不同,直接把該元素存儲(chǔ)到 hashCode() 指定的位置
二、如果 hashCode 值相同,那么會(huì)繼續(xù)判斷該元素和集合對(duì)象的 equals() 作比較。

1、hashCode 相同,equals 為 true,則視為同一個(gè)對(duì)象,不保存在 hashSet()中
2、hashCode 相同,equals 為 false,則存儲(chǔ)在之前對(duì)象同槽位的鏈表上,這非常麻煩,我們應(yīng)該約束這種情況,即保證:如果兩個(gè)對(duì)象通過(guò) equals() 方法返回 true,這兩個(gè)對(duì)象的 hashCode 值也應(yīng)該相同。
注意:每一個(gè)存儲(chǔ)到 哈希 表中的對(duì)象,都得提供 hashCode() 和 equals() 方法的實(shí)現(xiàn),用來(lái)判斷是否是同一個(gè)對(duì)象
常見(jiàn)的 hashCode()算法


LinkedHashSet集合:有序,不可重復(fù)。
因?yàn)榈讓硬捎?鏈表 和 哈希表的算法。鏈表保證元素的添加順序,哈希表保證元素的唯一性

TreeSet:有序,不可重復(fù),底層使用紅黑樹(shù)算法,擅長(zhǎng)于范圍查詢。
如果使用 TreeSet() 無(wú)參數(shù)的構(gòu)造器創(chuàng)建一個(gè) TreeSet 對(duì)象, 則要求放入其中的元素的類必須實(shí)現(xiàn) Comparable 接口所以, 在其中不能放入 null 元素。
注意:必須放入同樣類的對(duì)象(默認(rèn)會(huì)進(jìn)行排序) 否則可能會(huì)發(fā)生類型轉(zhuǎn)換異常,我們可以使用泛型來(lái)進(jìn)行限制
 Set treeSet = new TreeSet();
 //添加一個(gè) Integer 類型的數(shù)據(jù)
 treeSet.add(1);  
 //添加一個(gè) String 類型的數(shù)據(jù)
 treeSet.add("a");  
 //會(huì)報(bào)類型轉(zhuǎn)換異常的錯(cuò)誤
 System.out.println(treeSet);  


自動(dòng)排序:添加自定義對(duì)象的時(shí)候,必須要實(shí)現(xiàn) Comparable 接口,并要覆蓋 compareTo(Object obj) 方法來(lái)自定義比較規(guī)則
如果 this > obj,返回正數(shù) 1
如果 this < obj,返回負(fù)數(shù) -1
如果 this = obj,返回 0 ,則認(rèn)為這兩個(gè)對(duì)象相等

兩個(gè)對(duì)象通過(guò) Comparable 接口 compareTo(Object obj) 方法的返回值來(lái)比較大小, 并進(jìn)行升序排列
定制排序: 創(chuàng)建 TreeSet 對(duì)象時(shí), 傳入 Comparator 接口的實(shí)現(xiàn)類。
要求: Comparator 接口的 compare 方法的返回值和 兩個(gè)元素的 equals() 方法具有一致的返回值。
 public class TreeSetTest {
    public static void main(String[] args) {
        Person p1 = new Person(1);
        Person p2 = new Person(2);
        Person p3 = new Person(3);

        Set<Person> set = new TreeSet<>(new Person());
        set.add(p1);
        set.add(p2);
        set.add(p3);
        System.out.println(set);  //結(jié)果為[1, 2, 3]
    }

}

class Person implements Comparator<Person>{
    public int age;
    public Person(){}
    public Person(int age){
        this.age = age;
    }
    @Override
    /***
     * 根據(jù)年齡大小進(jìn)行排序
     */

    public int compare(Person o1, Person o2) {
        // TODO Auto-generated method stub
        if(o1.age > o2.age){
            return 1;
        }else if(o1.age < o2.age){
            return -1;
        }else{
            return 0;
        }
    }

    @Override
    public String toString() {
        // TODO Auto-generated method stub
        return ""+this.age;
    }
}
當(dāng)需要把一個(gè)對(duì)象放入 TreeSet 中,重寫該對(duì)象對(duì)應(yīng)的 equals() 方法時(shí),應(yīng)保證該方法與 compareTo(Object obj) 方法有一致的結(jié)果。

HashSet、LinkedHashSet和TreeSet三個(gè) Set 接口的實(shí)現(xiàn)類比較:

相同點(diǎn):
1、都不允許元素重復(fù)
2、都不是線程安全的 解決辦法:Set set = Collections.synchronizedSet(set 對(duì)象)

不同點(diǎn):
HashSet:不保證元素的添加順序,底層采用 哈希表算法,查詢效率高。判斷兩個(gè)元素是否相等,equals() 方法返回 true,hashCode() 值相等。即要求存入 HashSet 中的元素要覆蓋 equals() 方法和 hashCode()方法

LinkedHashSet:HashSet 的子類,底層采用了 哈希表算法以及 鏈表算法,既保證了元素的添加順序,也保證了查詢效率。但是整體性能要低于 HashSet

TreeSet:不保證元素的添加順序,但是會(huì)對(duì)集合中的元素進(jìn)行排序。底層采用 紅-黑 樹(shù)算法(樹(shù)結(jié)構(gòu)比較適合范圍查詢)
本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開(kāi)APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
HashSet 與TreeSet和LinkedHashSet的區(qū)別
Java集合詳解【面試+工作】
JAVA基礎(chǔ) 之 Set
精解四大集合框架:Set核心知識(shí)總結(jié)
java集合框架總結(jié)
Java集合框架和泛型機(jī)制
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服