国产一区二区精品-国产一区二区精品久-国产一区二区精品久久-国产一区二区精品久久91-免费毛片播放-免费毛片基地

千鋒教育-做有情懷、有良心、有品質(zhì)的職業(yè)教育機(jī)構(gòu)

手機(jī)站
千鋒教育

千鋒學(xué)習(xí)站 | 隨時(shí)隨地免費(fèi)學(xué)

千鋒教育

掃一掃進(jìn)入千鋒手機(jī)站

領(lǐng)取全套視頻
千鋒教育

關(guān)注千鋒學(xué)習(xí)站小程序
隨時(shí)隨地免費(fèi)學(xué)習(xí)課程

當(dāng)前位置:首頁  >  技術(shù)干貨  > set.contains詳解

set.contains詳解

來源:千鋒教育
發(fā)布人:xqq
時(shí)間: 2023-11-23 11:48:50 1700711330

一、set.contains介紹

set.contains()函數(shù)是Java中Set接口中的一個(gè)方法,該方法判斷Set中是否包含某個(gè)元素,若包含則返回true,否則返回false。

其用法為:

Set set = new HashSet<>();
set.add(element);
boolean result = set.contains(element);

其中,element為Set中的元素,result為boolean類型的變量,用于記錄Set中是否包含該元素。

二、set.contains的時(shí)間復(fù)雜度

set.contains的時(shí)間復(fù)雜度與使用的Set實(shí)現(xiàn)有關(guān)。對(duì)于基于哈希表的實(shí)現(xiàn),如HashSet和LinkedHashSet,其平均時(shí)間復(fù)雜度為O(1);對(duì)于基于紅黑樹的實(shí)現(xiàn),如TreeSet,其平均時(shí)間復(fù)雜度為O(log n)。

在實(shí)際應(yīng)用中,選用適當(dāng)?shù)腟et實(shí)現(xiàn)能夠達(dá)到更好的性能。

三、set.contains與equals的關(guān)系

set.contains的判斷依賴于元素的hashCode以及equals函數(shù)的返回值。如果兩個(gè)元素的hashCode相同,但equals函數(shù)返回值不同,則判斷這兩個(gè)元素相等的結(jié)果是錯(cuò)誤的。

為了避免此類問題,程序員需要確保重寫了元素類的equals函數(shù),保證元素相等的判斷符合自己的需求。

例如,對(duì)于一個(gè)Person類:

class Person {
    private String name;
    private int age;
    //... 
    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (!(o instanceof Person)) return false;
        Person person = (Person) o;
        return age == person.age &&
                Objects.equals(name, person.name);
    }
    @Override
    public int hashCode() {
        return Objects.hash(name, age);
    }
}

在使用Set時(shí),如果只重寫了hashCode函數(shù)而沒有重寫equals函數(shù),則set.contains()很可能會(huì)判斷出兩個(gè)元素不相等,即使它們?cè)跇I(yè)務(wù)上應(yīng)該是相等的。

四、set.contains的使用場(chǎng)景

set.contains的常見使用場(chǎng)景包括:

判斷集合中是否包含指定元素 對(duì)于刪除、修改等操作,先使用set.contains判斷操作元素是否存在 對(duì)于數(shù)據(jù)量比較大的List,可以先將List中的元素加入set中,再使用set.contains實(shí)現(xiàn)快速查找

五、set.contains的應(yīng)用舉例

以下代碼展示了如何使用set.contains實(shí)現(xiàn)兩個(gè)字符串的交集:

public Set intersection(String s1, String s2) {
    Set set1 = new HashSet<>();
    Set set2 = new HashSet<>();
    for (char c : s1.toCharArray()) {
        set1.add(c);
    }
    for (char c : s2.toCharArray()) {
        set2.add(c);
    }
    Set result = new HashSet<>();
    for (char c : set1) {
        if (set2.contains(c)) {
            result.add(c);
        }
    }
    return result;
}

其中,set1和set2分別表示兩個(gè)字符串中各個(gè)字符集合,用set.contains計(jì)算它們的交集,最終返回一個(gè)Set類型的結(jié)果。

聲明:本站稿件版權(quán)均屬千鋒教育所有,未經(jīng)許可不得擅自轉(zhuǎn)載。
10年以上業(yè)內(nèi)強(qiáng)師集結(jié),手把手帶你蛻變精英
請(qǐng)您保持通訊暢通,專屬學(xué)習(xí)老師24小時(shí)內(nèi)將與您1V1溝通
免費(fèi)領(lǐng)取
今日已有369人領(lǐng)取成功
劉同學(xué) 138****2860 剛剛成功領(lǐng)取
王同學(xué) 131****2015 剛剛成功領(lǐng)取
張同學(xué) 133****4652 剛剛成功領(lǐng)取
李同學(xué) 135****8607 剛剛成功領(lǐng)取
楊同學(xué) 132****5667 剛剛成功領(lǐng)取
岳同學(xué) 134****6652 剛剛成功領(lǐng)取
梁同學(xué) 157****2950 剛剛成功領(lǐng)取
劉同學(xué) 189****1015 剛剛成功領(lǐng)取
張同學(xué) 155****4678 剛剛成功領(lǐng)取
鄒同學(xué) 139****2907 剛剛成功領(lǐng)取
董同學(xué) 138****2867 剛剛成功領(lǐng)取
周同學(xué) 136****3602 剛剛成功領(lǐng)取
相關(guān)推薦HOT