2013-02-20 60 views
1

我剛開始收集和我寫代碼HashSetHashSet的不衰第二添加呼叫

這裏測試的是代碼(Person.java):

public class Person 
{ 
    int id; 

    public Person(int id) 
    { 
    this.id=id; 
    } 

    public int getId() 
    { 
    return id; 
    } 

    public void setId(int id) 
    { 
    this.id=id; 
    } 

    public boolean equals(Object o) 
    { 
    if (o instanceof Person) 
    { 
     Person p=(Person)o; 
     if (this.id==p.id) 
     return false; 
     else 
     return true; 
    } 
    else return false; 
    } 

    public int hashCode() 
    { 
    return 21*id; 
    } 
} 

和實現一流的,只是一個簡單的類:

import java.util.*; 

class HashSetTest 
{ 
    public static void main(String[] args) 
    { 
    Set<Person> set=new HashSet<Person>(); 
    Person p1=new Person(6); 
    Person p2=new Person(6); 
    System.out.println(set.add(p1)); 
    System.out.println(set.add(p2));   
    } 
} 

如果我沒看錯的第二System.out.println語句應該返回false,因爲它不應該添加的元素因爲它是重複的,但它返回true。

+2

格式化您的代碼。 – m0skit0 2013-02-20 13:24:59

回答

6

看來Person.equals方法正在返回false元素匹配時。

應該

if (this.id==p.id) 
    return true; 
else 
    return false; 
+5

或者只是'return this.id == p.id;' – jlordo 2013-02-20 13:28:14

+0

感謝它的工作......只是一個問題可能是一個非常愚蠢的問題,當一個人打電話給equals和hashocde時,因爲我沒有寫任何電話給它 – 2013-02-20 13:30:56

+0

@Deepak_Sharma:看看'HashSet'的來源並遵循控制流程。 – jlordo 2013-02-20 13:47:18

1

equals方法有問題。當id相同時,它返回false

相關問題