SSブログ

Listからremoveするための正しい実装 [Java]

JavaでListからremove()する際には、equals()をオーバーライドしないと正しい挙動をしない可能性があるという書き込みを見つけました。


これはひとつの変数に、2回以上newして作成したインスタンス格納した場合に注意すべき内容です。
 Listにデータを詰めるときには、for文の中でよくこのパターンをやりますよね。
そもそもインスタンス作成の考えをきっちり抑えていないと、この過ちを犯すことになります。私も言われてみて、そりゃそうだと膝を叩きました。
一つの変数を使いまわしても、都度インスタンス生成すればどんどん新たな空間が割り当てられるわけです。equals()をオーバーライドしないでのremove()は本当の削除対象と合致しているか、曖昧になっているわけです。

そこで明示的にマッチさせるため。equals()をオーバーライドするわけです。

 

public boolean equals(Object o) {
    if(o instanceof TargetClass) {
        return this.name.equals(((TargetClass)o).name);
    } else {
        return false;
    }
}

 

 案外見逃してそう。


nice!(0)  コメント(0)  トラックバック(0) 

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

トラックバック 0

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。