- 实现步骤:
- 重写
User
类的equals
方法,用于判断两个User
对象的name
和age
是否相等。
- 重写
User
类的hashCode
方法,保证相等的User
对象(根据equals
方法判断)具有相同的哈希码。这是因为Set
集合在判断元素是否重复时,先根据hashCode
方法确定元素所在的桶,再通过equals
方法进一步判断是否重复。
- 创建
User
对象,并将其添加到Set
集合中。
- 关键代码示例:
import java.util.HashSet;
import java.util.Set;
class User {
private String name;
private int age;
public User(String name, int age) {
this.name = name;
this.age = age;
}
// 重写equals方法
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
User user = (User) o;
return age == user.age && name.equals(user.name);
}
// 重写hashCode方法
@Override
public int hashCode() {
int result = 17;
result = 31 * result + name.hashCode();
result = 31 * result + age;
return result;
}
}
public class Main {
public static void main(String[] args) {
Set<User> userSet = new HashSet<>();
User user1 = new User("Alice", 25);
User user2 = new User("Bob", 30);
User user3 = new User("Alice", 25);
userSet.add(user1);
userSet.add(user2);
userSet.add(user3);
System.out.println(userSet.size());// 输出2,因为user1和user3被视为同一个对象
}
}