请按照下列要求编写程序。 I.编写一个Student类,包含name和age属 性,提供有参构造方法。 2在Student类中,重写tosString0方法,输出 age和name的值。 3在Student类中,重写hashCode(和equals) 方法 ahashCode 的返回值是namze的hash值与age 的和。 6equals)判断对象的nameDage是否相同, 相同则返回true不同返回false。 4、最后编写一个测试类,创建一个 Hash.Set Student 对象hs,向hs中添加多个 Student对象,假设有两个Student对象相等,输 出Hash.Set,观察是否添加成功,用java写
时间: 2024-03-04 21:49:34 浏览: 69
以下是Java实现:
```java
import java.util.HashSet;
class Student {
private String name;
private int age;
public Student(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "Name: " + this.name + ", Age: " + this.age;
}
@Override
public int hashCode() {
return this.name.hashCode() + this.age;
}
@Override
public boolean equals(Object obj) {
if (obj == null) {
return false;
}
if (obj == this) {
return true;
}
if (!(obj instanceof Student)) {
return false;
}
Student other = (Student) obj;
return this.name.equals(other.name) && this.age == other.age;
}
}
public class StudentTest {
public static void main(String[] args) {
HashSet<Student> hs = new HashSet<>();
Student s1 = new Student("Alice", 18);
Student s2 = new Student("Bob", 20);
Student s3 = new Student("Charlie", 22);
Student s4 = new Student("Alice", 18); // 与s1相等
hs.add(s1);
hs.add(s2);
hs.add(s3);
hs.add(s4); // 添加s4
System.out.println(hs); // 输出HashSet
}
}
```
解释一下上面的代码:
- Student类有两个属性:name和age,以及一个有参构造方法。
- 重写了toString方法,用于输出对象的属性。
- 重写了hashCode方法,将name的hash值与age的和作为对象的hash值。
- 重写了equals方法,判断两个对象的name和age是否相同。
- 测试代码中,创建了四个Student对象,并将它们添加到一个HashSet中,因为重写了hashCode和equals方法,所以HashSet可以正确判断两个对象是否相等。最后输出了这个HashSet,可以看到只有三个对象被添加进去了,因为s1和s4是相同的,而HashSet只会保留一个。
阅读全文