在Java的Set集合中放入自定义类

来源:互联网 发布:黄连和黄连 知乎 编辑:程序博客网 时间:2024/06/07 17:03

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());        }    }}

运行结果

张三 
原创粉丝点击