【初心者】Java質問・相談スレッド59【大歓迎】
■ このスレッドは過去ログ倉庫に格納されています
0151124
NGNG教えて頂いたことを調べてすこし変更し、このようにしました。
for(int i=0; i<nodeList.getLength(); i++){
Element elem = (Element)nodeList.item(i);
myHashSet.add(
new MyObj(
elem.getAttribute("attr1"),
elem.getAttribute("attr2") )
)
);
}
このクラスの変更と言えば、ご指摘頂いたように
ArrayListをHashSetに変更した点です。
(Setの中でも今回はHashSetが一番向いていると思うのでこれにしました)
そして、MyObjにequalsメソッドを実装しました。
public boolean equals(MyObj myObj){
if( p1 == o.getP1() && p2 == o.getP2() )
return true;
else
return false;
}
これで実行してみたのですが、相変わらず全てのMyObjがmyHashSetに追加されてしまいます。
Setがaddする時に、どのように重複データか判定するのか、Setインターフェイスのドキュメントを読んでみると
>つまり、セット内に、(o==null ? e==null : o.equals(e)) に該当する要素 e がなかった場合は、指定された要素 o をセットに追加
とあるのですが、上のコードで言うMyObj#equalsをreturn true;だけにしても結果は同じで、
デバッグで確認しても、MyObj#equalsは呼ばれていません。
自分の考えの間違えをご指摘頂けませんでしょうか?
■ このスレッドは過去ログ倉庫に格納されています