在Java中,Set集合是一個不允許重復元素的集合。它通過以下方式保證元素唯一:
使用equals()
方法比較元素是否相等:Set集合在添加元素時,會使用equals()
方法來檢查新元素是否已經存在于集合中。如果存在,那么新元素將被忽略;如果不存在,那么新元素將被添加到集合中。
使用hashCode()
方法生成哈希值:Set集合內部使用哈希表(如HashMap)來存儲元素。當調用add()
方法添加元素時,Set會首先計算元素的哈希值,然后根據哈希值將元素存儲在哈希表的相應位置。由于哈希表不允許重復的鍵,因此Set集合中的元素也是唯一的。
為了確保Set集合中的元素唯一,你需要重寫自定義對象的equals()
和hashCode()
方法。這兩個方法通常一起實現,以確保當兩個對象相等時,它們的哈希值也相等。以下是一個簡單的示例:
public class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (obj == null || getClass() != obj.getClass()) {
return false;
}
Person person = (Person) obj;
return age == person.age && Objects.equals(name, person.name);
}
@Override
public int hashCode() {
return Objects.hash(name, age);
}
}
在這個示例中,我們定義了一個Person
類,并重寫了equals()
和hashCode()
方法。這樣,當我們使用HashSet
或LinkedHashSet
等Set集合來存儲Person
對象時,它們的唯一性將得到保證。