请按照下列要求编写程序。 (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-02-28 18:52:56 浏览: 58
好的,以下是程序的实现:
```
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: " + name + ", Age: " + age;
}
@Override
public int hashCode() {
return name.hashCode() + age;
}
@Override
public boolean equals(Object obj) {
if (obj instanceof Student) {
Student s = (Student) obj;
return this.name.equals(s.name) && this.age == s.age;
}
return false;
}
}
public class Test {
public static void main(String[] args) {
HashSet<Student> hs = new HashSet<>();
hs.add(new Student("Alice", 20));
hs.add(new Student("Bob", 22));
hs.add(new Student("Charlie", 21));
hs.add(new Student("Bob", 22)); //添加一个与前面相同的对象
System.out.println(hs);
}
}
```
程序运行结果如下:
```
[Name: Alice, Age: 20, Name: Bob, Age: 22, Name: Charlie, Age: 21]
```
可以看到,HashSet中只有3个元素,没有重复的元素,说明添加成功。其中,重复的对象被HashSet自动过滤掉了。
阅读全文