1. 程式人生 > >Java中HashSet要重寫equals方法和hashCode方法

Java中HashSet要重寫equals方法和hashCode方法

下面給出一個屬性不同但雜湊碼相同的例子:import java.util.HashSet;import java.util.Iterator;import java.util.Set;class Person {private String name;private int id;Person(String name,int id) {this.name = name;this.id = id;}public void setName(String name){this.name = name;}public String getName(){return name;
}public void setId(int id){this.id = id;}public int getId(){return id;}public int hashCode(){return name.hashCode()+id; //使用字串雜湊值與Integer的雜湊值的組合 //這樣會產生重碼,實際上重位元速率很高}public boolean equals(Object obj){if(obj instanceof Person){ //Person p = (Person)obj;return(name.equals(p.name) && id == p.id);
}return super.equals(obj);}}public class TestHashSet2 {public static void main(String[] args) {Person p1 = new Person("a",1);Person p2 = new Person("b",0);Set<Person > set = new HashSet<Person >();set.add(p1);set.add(p2);Iterator<Person > it = set.iterator();while(it.hasNext()){
System.out.println(it.next().getName());}}}END注意事項總思路:hashCode不同時,則必為不同物件。hashCode相同時,根據equlas()方法判斷是否為同一物件。在HashSet,HashMap,HashTable中都存在該問題。