📅  最后修改于: 2023-12-03 14:42:54.506000             🧑  作者: Mango
hashCode()
方法是Java中的一个对象方法,用于获取对象在哈希表中的存储位置。在HashSet
中使用hashCode()
方法来确定每个元素在哈希表中的位置。
HashSet
是一个可以存储对象的集合类,它通过哈希表实现元素的存储和查找。HashSet
允许存储不同类型的对象,可以实现自动去重的功能。
使用HashSet
时,需要重写对象的hashCode()
方法,以保证相同内容的对象具有相同的哈希码(hash code)。同时,也需要重写对象的equals()
方法,在比较两个对象是否相等时使用。
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 o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Person person = (Person) o;
return age == person.age && Objects.equals(name, person.name);
}
@Override
public int hashCode() {
return Objects.hash(name, age);
}
}
在上面的示例中,Person
类重写了hashCode()
和equals()
方法。hashCode()
方法通过调用Objects.hash()
方法来生成哈希码,而equals()
方法则比较了两个对象的name
和age
属性是否相等。
Set<Person> set = new HashSet<>();
Person p1 = new Person("Alice", 25);
Person p2 = new Person("Bob", 30);
Person p3 = new Person("Alice", 25);
set.add(p1);
set.add(p2);
set.add(p3);
System.out.println(set.size()); // 输出2
在上面的示例中,创建了三个Person
对象,并将它们添加到HashSet
中。由于p1
和p3
对象的属性相同,因此它们的哈希码也相同。因此,HashSet
中只会存储其中一个对象,最终输出集合大小为2。
hashCode()
方法和equals()
方法是HashSet
实现去重功能的基础。在使用HashSet
时,需要重写这两个方法,以保证集合中的元素是按照自定义的方式去重的。