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