1. 题目来源
在做Java竞赛的编程题中,有一题要求实现一个Person类,要求能够放入到Set集合中,Person类要求有两个属性姓名和年龄。
2. 题目解析
首先复习一下基础知识,在Java中
a.equals(b)为true,则a和b的HashCode一定相等
Java中的散列表采用HashCode计算在数组中的位置,由于我们需要重写equals方法,所以必须重写hashcode()方法,这样才能写出符合题目要求的代码。Object类中的equals方法判断的是对象的引用是否相同,我们这里需要改成判断是否是Person类的对象,然后判断姓名和年龄是否相等。
3. 参考代码
Person类
public class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
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;
}
@Override
public boolean equals(Object obj) {
if (obj instanceof Person) {
Person person = (Person)obj;
if (name.equals(person.getName())) {
if (age == person.getAge()) {
return true;
}
}
}
return false;
}
@Override
public int hashCode() {
return name.hashCode() + new Integer(age).hashCode();
}
}
测试类
public class Test3 {
public enum Dogs {collie, harrier, shepherd};
public static void main(String[] args) {
Set<Person> set = new HashSet<Person>();
set.add(new Person("张三", 25));
set.add(new Person("张三", 25));
set.add(new Person("张三", 25));
Iterator<Person> it = set.iterator();
while (it.hasNext()) {
Person person = (Person)it.next();
System.out.println(person.getName());
}
}
}
运行结果
张三
本文介绍如何在Java的Set集合中存放自定义的Person类对象,涉及重写equals()和hashCode()方法以确保正确比较。在解决编程竞赛题目时,Person类包含姓名和年龄属性,通过实现特定的比较逻辑来满足集合的要求。
1295

被折叠的 条评论
为什么被折叠?



