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;
}
}
案外見逃してそう。
2017-02-14 10:01
nice!(0)
コメント(0)
トラックバック(0)
コメント 0