(1)编写一个Student类,包含name和age属性,提供有参构造方法。
(2)在Student类中,重写toString()方法,输出age和name的值。
(3)在Student类中,重写hashCode()和equals()方法。
• hashCode()的返回值是name的哈希值与age的和。
• equals()判断对象的name和age是否相同,相同则返回true,不同则返回false。
(4)编写一个测试类,创建一个HashSet<Student>对象hs,向 hs中添加多个Student 对象,假设有两个Student 对象相等。输出HashSet 集合,观察Student 对象是否添加成功。
import java.util.*;
class Student{
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
private String name;
private int age;
public Student(int age,String name){
this.age=age;
this.name=name;
}
public String toString(){
return age + ":" + name;
}
public int hashCode(){
return name.hashCode() + age;
}
public boolean equals(Object obj){
if(this == obj){
return true;
}
if (!(obj instanceof Student)){//instanceof是Java的一个二元操作符,和==,>,<是同一东西。由于它是由字母组成的,所以也是Java的保留关键字。它的作用是测试它左边的对象是否是它右边的类的实例,返回boolean类型的数据,
return false;
}
Student stu = (Student) obj;
boolean b;
b=this.name.equals(stu.name) &&this.age == stu.age;//判断对象属性是否相同,字符串用equals比较,int用==比较
return b;
}
}
public class 二 {
public static void main(String[] args) {
HashSet<Student> hs = new HashSet<Student>();
hs.add(new Student(18,"zhangsan"));
hs.add(new Student(20,"lisi"));
hs.add(new Student(20,"lisi"));
System.out.println(hs);//二叉树存储结构,元素遍历和存储顺序不一样,感兴趣的同学可以去了解一下哈希表,数据结构有关知识
/* Iterator it = hs.iterator();
while(it.hasNext()){
Object obj = it.next();
System.out.println(obj);
}*/
}
}
运行结果