0

我正在开发具有大量 ArraYlists 的应用程序,它需要将它们与非列表数据进行比较。当我尝试这种方法fdata.contains(data2)时,它总是返回 false。ArayLists 包含名为“favdat”的类,如下所示:`

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

Data2 的定义是这样的:favdat Data2=new favdat(); 我也尝试过保留所有方法,它返回大小为 0 的列表。我知道有些数据是相等的。

所以问题是我怎么知道是否fdata包含data2

4

2 回答 2

9

比较对象的默认实现是比较它们是否是同一个对象,因此具有完全相同属性的两个对象仍然不相等。您需要做的是覆盖hashCodeequals方法。举个例子:

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,并且您的代码通常更容易阅读以保持字段声明分开。

于 2012-06-08T06:16:50.680 回答
1

您需要定义一个equals(Object obj)内部调用的方法,该方法favdat将启用对象比较。

这里有一个更详细的方法:

于 2012-06-08T06:15:11.983 回答