请按照下列要求编写程序。 (1) 编写一个Student类,包含name和age属性,提供有参构造方法。 (2) 在Student类中,重写toString()方法,输出age和name的值。 (3) 在Student类中,重写hashCode()和equals()方法 a.hashCode()的返回值是name的hash值与age的和。b.equals()判断对象的name和age是否相同,相同则返回true不同返回false。 (4)最后编写一个测试类,创建一个HashSet<Student>对象hs,向hs中添加多个Student对象,假设有两个Student对象相等,输出HashSet,观察是否添加成功。
时间: 2024-03-23 20:40:59 浏览: 70
好的,下面是Java代码实现:
Student类:
```java
public 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: " + name + ", age: " + age;
}
@Override
public int hashCode() {
return name.hashCode() + age;
}
@Override
public boolean equals(Object obj) {
if (obj == this) {
return true;
}
if (obj instanceof Student) {
Student s = (Student) obj;
return name.equals(s.name) && age == s.age;
}
return false;
}
}
```
测试类:
```java
import java.util.HashSet;
public class TestStudent {
public static void main(String[] args) {
HashSet<Student> hs = new HashSet<Student>();
Student s1 = new Student("Tom", 18);
Student s2 = new Student("Jerry", 19);
Student s3 = new Student("Tom", 18);
hs.add(s1);
hs.add(s2);
hs.add(s3);
System.out.println(hs);
}
}
```
解释一下代码:
首先,我们创建了一个`Student`类,包含了姓名和年龄两个属性,并提供了有参构造方法。在`toString()`方法中,我们重写了`Object`类的`toString()`方法,输出了姓名和年龄的值。
在`hashCode()`方法中,我们重写了`Object`类的`hashCode()`方法,返回了姓名的`hashCode()`值与年龄的和。
在`equals()`方法中,我们重写了`Object`类的`equals()`方法,判断对象的姓名和年龄是否相同,如果两个属性的值都相等,则返回`true`,否则返回`false`。
最后,在测试类中,我们创建了一个`HashSet<Student>`对象`hs`,向其中添加了三个`Student`对象`s1`、`s2`和`s3`,其中`s1`和`s3`的属性值相同。我们将`hs`输出,观察是否添加成功。因为`s1`和`s3`相等,所以只会输出两个`Student`对象。
希望能够帮到你。
阅读全文