1. 程式人生 > >在Java的Set集合中放入自定義類

在Java的Set集合中放入自定義類

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

    }


}

執行結果

張三