在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
对象时,它们的唯一性将得到保证。