在Java的Set集合中放入自定義類
阿新 • • 發佈:2019-01-26
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());
}
}
}
執行結果
張三