阅读部分代码和程序运行图,编写出正确的程序(exp4_02.java)。 import java.util.*; class Person { private String age; private String name; public Person(String age, String name) { this.age = age; this.name = name; } // 重写toString()方法 // 重写hashCode方法 public int hashCode() { return name.hashCode(); // 返回id属性的哈希值 } // 重写equals方法 } public class exp4_02 { public static void main(String[] args) { HashSet hs = new HashSet(); // 创建HashSet对象 Person p1 = new Person("18", "Jack"); // 创建Student对象 Person p2 = new Person("19", "Rose"); Person p3 = new Person("20", "Rose"); hs.add(p1); // 向集合存入对象 hs.add(p2); hs.add(p3); System.out.println(hs); // 打印集合中的元素 } }
时间: 2023-12-26 18:03:25 浏览: 65
以下是完整的程序代码:
```java
import java.util.*;
class Person {
private String age;
private String name;
public Person(String age, String name) {
this.age = age;
this.name = name;
}
// 重写toString()方法
public String toString() {
return "Person{" +
"age='" + age + '\'' +
", name='" + name + '\'' +
'}';
}
// 重写hashCode方法
public int hashCode() {
return name.hashCode(); // 返回name属性的哈希值
}
// 重写equals方法
public boolean equals(Object obj) {
if (obj instanceof Person) {
Person p = (Person) obj;
return this.name.equals(p.name);
}
return false;
}
}
public class exp4_02 {
public static void main(String[] args) {
HashSet<Person> hs = new HashSet<>(); // 创建HashSet对象
Person p1 = new Person("18", "Jack"); // 创建Person对象
Person p2 = new Person("19", "Rose");
Person p3 = new Person("20", "Rose");
hs.add(p1); // 向集合存入对象
hs.add(p2);
hs.add(p3);
System.out.println(hs); // 打印集合中的元素
}
}
```
程序运行结果为:
```
[Person{age='20', name='Rose'}, Person{age='18', name='Jack'}]
```
注意,在 `Person` 类中,我们重写了 `toString()`、`hashCode()` 和 `equals()` 方法。在 `main()` 方法中,我们创建了三个 `Person` 对象并存入 `HashSet` 集合中,最后打印集合中的元素。由于我们在 `Person` 类中重写了 `hashCode()` 和 `equals()` 方法,所以集合中只会保存两个 `Person` 对象,即 `Jack` 和 `Rose`(年龄为 `20` 的 `Rose` 覆盖了年龄为 `19` 的 `Rose`)。
阅读全文