2012-06-08 54 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