2014-06-17 43 views
0

i將整數值對類,如下:整數對添加到HashSet的java的

public class pair{ 
    int a; 
    int b; 
    pair(int p,int q){ 
     this.a=p; 
     this.b=q; 
    } 
} 

當我嘗試添加到他們的HashSet沒有重複。

HashSet<pair> set=new HashSet<pair>(); 
     pair temp=new pair(3,5); 
     set.add(temp); 
     pair temp1=new pair(3,5); 
     set.add(temp1); 
     for(pair p:set){ 
      System.out.println(p.a+" "+p.b); 
     } 

它給我的輸出:

3 5 
3 5 

我應該修改的內容,使之成爲HashSet的裏面沒有重複的。

+0

重寫hashCode()方法 – newbieee

回答

2

你需要重寫等於你類的方法來具體看每對,看看它們是否匹配。

編輯:是和散列碼方法必須overidden以及

+2

和'hashCode'。 –

4

你必須做兩兩件事:

  1. 覆蓋equals()
  2. 覆蓋hashCode()

和javadoc對於hashCode()告訴你,它必須同意equals(),即如果兩個對象是相等的,它們應該具有相同的hashCode。這是確定兩個對象不等於有相同的hashCode,

事情是這樣的:

public class pair{ 
    int a; 
    int b; 
    pair(int p,int q){ 
     a=p; 
     b=q; 
    } 
    public boolean equals(Object o) { 
     if (o instanceof Pair) { 
      Pair p = (Pair)o; 
      return p.a == a && p.b == b; 
     } 
     return false; 
    } 
    public int hashCode() { 
     return new Integer(a).hashCode() * 31 + new Integer(b).hashCode(); 
    } 
} 
2

你應該覆蓋類的都hashCodeequals方法這個工作。這是爲了兌現Java中的對象的hashCode和equals約定。