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 10:42:24 浏览: 80
好的,我来为您解答。
下面是实现代码:
```
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 "Student{" +
"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;
}
}
```
测试类:
```
import java.util.HashSet;
public class Test {
public static void main(String[] args) {
HashSet<Student> hs = new HashSet<>();
hs.add(new Student("张三", 18));
hs.add(new Student("李四", 20));
hs.add(new Student("王五", 22));
hs.add(new Student("张三", 18)); // 添加重复元素
System.out.println(hs);
}
}
```
输出结果:
```
[Student{name='李四', age=20}, Student{name='张三', age=18}, Student{name='王五', age=22}]
```
可以看到,虽然添加了两个相同的Student对象,但是只有一个被成功地添加到了HashSet中,符合我们的期望。
希望我的回答能够帮到您,如有疑问,请多多指教。
阅读全文