Java中HashSet要重寫equals方法和hashCode方法
阿新 • • 發佈:2019-02-16
下面給出一個屬性不同但雜湊碼相同的例子: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中都存在該問題。