2012-06-08 79 views
0

我正在開發應用程序,它有很多ArraYlists,它需要將它們與非列表數據進行比較。當我嘗試這種方法fdata.contains(data2)它總是返回false。 ArayLists包含一個名爲「favdat」類,這看起來是這樣的:`如果ArrayList包含不起作用

public class favdat { 
    public String product,term,note,link; 
} 

和數據2的定義是這樣的:favdat Data2=new favdat(); 我也tryed保留所有的方法,它在0 大小返回列表我知道,有些數據是平等的。

所以問題是我怎麼能告訴如果fdata包含data2

回答

8

比較對象的默認實現是比較它們是否是相同的對象,因此具有完全相同屬性的兩個對象仍然不是等於。你需要做的是覆蓋hashCode等於方法。舉個例子:

public int hashCode() { 
    return product.hashCode() * 31 + term.hashCode(); 
} 

public boolean equals(Object o) { 
    if (o instanceof favdata) { 
     favdata other = (favdata) o; 
     return product.equals(other.product) 
      && term.equals(other.term) 
      && note.equals(other.note) 
      && link.equals(other.link); 
    } else { 
     return false; 
    } 
} 

在java中的類名,通常開始與資本,所以這將是Favdat,和你的代碼通常變得更容易閱讀,以保持田間聲明分開。

+0

謝謝你!從昨天起,我就一直困擾着這個問題,這是一種拯救生命的方式! – J1and1