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