1) 设计一个Person类,在该类中定义两个变量name和age 2) 在Person类中重写hashCode()和equals()方法 3) 编写类Example10,在该类中定义一个HashSet集合 4) 将Person对象存入HashSet集合中,其中含有重复的Person对象 5) 遍历HashSet集合中的元素,观察结果是否含有重复的对象
时间: 2024-03-01 11:55:06 浏览: 99
好的,您的问题是如何设计一个Person类,在该类中定义两个变量name和age,在Person类中重写hashCode()和equals()方法,并在类Example10中使用HashSet集合存储Person对象并遍历HashSet集合中的元素,观察结果是否含有重复的对象。
下面是代码实现:
```
// Person类定义
public class Person {
private String name;
private int age;
// 构造函数
public Person(String name, int age) {
this.name = name;
this.age = age;
}
// 重写hashCode方法
@Override
public int hashCode() {
int result = 17;
result = 31 * result + name.hashCode();
result = 31 * result + age;
return result;
}
// 重写equals方法
@Override
public boolean equals(Object obj) {
if (obj == this) {
return true;
}
if (!(obj instanceof Person)) {
return false;
}
Person other = (Person) obj;
return name.equals(other.name) && age == other.age;
}
// getter和setter方法
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
// Example10类定义
import java.util.HashSet;
public class Example10 {
public static void main(String[] args) {
// 创建HashSet集合
HashSet<Person> set = new HashSet<>();
// 添加Person对象
Person p1 = new Person("Tom", 20);
Person p2 = new Person("Jerry", 22);
Person p3 = new Person("Tom", 20);
set.add(p1);
set.add(p2);
set.add(p3);
// 遍历HashSet集合中的元素
for (Person p : set) {
System.out.println(p.getName() + " " + p.getAge());
}
}
}
```
在Person类中,我们重写了hashCode()和equals()方法来判断两个Person对象是否相等。hashCode()方法使用了经典的31倍数+属性值的方式来生成哈希值,equals()方法比较两个Person对象的name和age属性是否相等。
在Example10类中,我们创建了一个HashSet集合,并添加了三个Person对象。由于p1和p3的name和age属性相等,因此添加p3时,HashSet集合会自动去重,不会添加重复的元素。最后,我们遍历HashSet集合中的元素,并打印每个Person对象的name和age属性。
阅读全文