一、set.contains介紹
set.contains()函數(shù)是Java中Set接口中的一個方法,該方法判斷Set中是否包含某個元素,若包含則返回true,否則返回false。
其用法為:
Set set = new HashSet<>();
set.add(element);
boolean result = set.contains(element);
其中,element為Set中的元素,result為boolean類型的變量,用于記錄Set中是否包含該元素。
二、set.contains的時間復(fù)雜度
set.contains的時間復(fù)雜度與使用的Set實現(xiàn)有關(guān)。對于基于哈希表的實現(xiàn),如HashSet和LinkedHashSet,其平均時間復(fù)雜度為O(1);對于基于紅黑樹的實現(xiàn),如TreeSet,其平均時間復(fù)雜度為O(log n)。
在實際應(yīng)用中,選用適當(dāng)?shù)腟et實現(xiàn)能夠達到更好的性能。
三、set.contains與equals的關(guān)系
set.contains的判斷依賴于元素的hashCode以及equals函數(shù)的返回值。如果兩個元素的hashCode相同,但equals函數(shù)返回值不同,則判斷這兩個元素相等的結(jié)果是錯誤的。
為了避免此類問題,程序員需要確保重寫了元素類的equals函數(shù),保證元素相等的判斷符合自己的需求。
例如,對于一個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時,如果只重寫了hashCode函數(shù)而沒有重寫equals函數(shù),則set.contains()很可能會判斷出兩個元素不相等,即使它們在業(yè)務(wù)上應(yīng)該是相等的。
四、set.contains的使用場景
set.contains的常見使用場景包括:
判斷集合中是否包含指定元素 對于刪除、修改等操作,先使用set.contains判斷操作元素是否存在 對于數(shù)據(jù)量比較大的List,可以先將List中的元素加入set中,再使用set.contains實現(xiàn)快速查找五、set.contains的應(yīng)用舉例
以下代碼展示了如何使用set.contains實現(xiàn)兩個字符串的交集:
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分別表示兩個字符串中各個字符集合,用set.contains計算它們的交集,最終返回一個Set類型的結(jié)果。