0

arraylist android に小さな問題があります。問題に直面している場所を教えてください。

名前、連絡先番号、一意の ID に関する詳細を保持するカスタム連絡先オブジェクトがあります。データベースにクエリを実行すると、リストが取得され、ArrayList に格納されます。

ここで私はどのように

Arraylist<contact> ctlist = new Arraylist(contact);
ctlist = getitemfromDB();

次のシナリオでは、クエリを実行し、特定の条件に基づいて連絡先オブジェクトのセットを取得します。連絡先リスト オブジェクトを再度取得します。

Arraylist<contact> newctlist = new Arraylist(contact);
newctlist = getitemfromDB(condition);

ここで、オブジェクトを から選択しnewctlistて検索するとctlist、オブジェクトは ctlist コンパイラに存在しますが、オブジェクトが見つからないと表示されます。

同じリスト内を検索すると、つまり newctlist からオブジェクトを選択して検索すると、正しい期待される結果が得られます。

何が問題だろう。

4

1 に答える 1

2

Mitch Wheat が語ったように、2 つの異なるオブジェクトを比較しようとしています。これは、List がequalsメソッドを使用して特定のオブジェクトを取得するためです。カスタムクラスでオーバーライドしなかったと思います。連絡先クラスのフィールドに基づいてメソッドをequals実装するだけです。hashCode

実際、 Bean のように、等価性が単なる参照等価性とは異なる意味を持つクラスでは、メソッドequalsとメソッドを常にオーバーライドするようにしてください。あちらこちらご覧hashCodeください。さらに、可能であれば、Josh Bloch の「Effective Java」の第 3 章を読んでください。この章には、これらの実装の品質ルールが含まれています (ちなみに、本全体を読んでください。すばらしい内容です)。

それらを正しく実装するのに役立つライブラリがあることに注意してください( Java7 java.util.Objects、 Guava Objects、 apache commonsEqualsBuilderおよびHashCodeBuilder

これらのメソッドには非常に正確な数学的特性が必要なので注意してください

于 2012-11-06T15:14:11.207 に答える