0

私は現在、ArraYlistがたくさんあるアプリを開発しており、それらを非リストデータと比較する必要があります。このメソッドを試すと、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

オブジェクトを比較するためのデフォルトの実装は、それらが同じオブジェクトであるかどうかを比較することです。したがって、まったく同じ属性を持つ2つのオブジェクトはまだ等しくありません。あなたがする必要があるのは、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)insideというメソッドを定義する必要があります。favdat

より詳細なハウツーは次のとおりです。

于 2012-06-08T06:15:11.983 に答える