我希望能够将itemOrders添加到ArrayList,然后检查itemOrder是否已经存在。如果那个特定的itemOrder已经在ArrayList中,我只想要保留一个副本。我无法弄清楚为什么这不会删除重复的副本。我甚至尝试将itemOrder转换为字符串并检查字符串是否相同并删除该方式,但我无法使其工作。对我做错的任何帮助?
public void add(ItemOrder itemOrder) {
this.list.add(itemOrder);
for (int i=0; i< this.list.size(); i++){
if (this.list.get(i).equals(itemOrder)){
this.list.remove(i);
}
}
}
我得到这样的结果。
内存格式
[ItemOrder @ 4d459b26]
[ItemOrder @ 4d459b26,ItemOrder @ 343d0d2b]
[ItemOrder @ 4d459b26,ItemOrder @ 343d0d2b,ItemOrder @ 142b9cd8]
字符串格式
[傻腻子,3.95(19.99为10),1]
[傻腻子,3.95(1999为10),1,愚蠢的弦,3.5(10为14.5),0]
[傻腻子,3.95(10为19.99),1,愚蠢的弦,3.5(10为14.5),0,傻腻子,3.95(10为19.99),1]
所以我认为发生的事情是它检查itemOrder的内存,因为它不一样,它让重复通过。我该如何解决这个问题?
答案 0 :(得分:2)
所以我认为正在发生的事情是它检查itemOrder的内存,因为它不一样,它让重复通过。我该如何解决这个问题?
是的,这是默认行为。
如果你想比较对象的状态/内容,你必须实现equals
(如果你这样做,你还必须实现hashCode
来匹配它。)
除此之外,正如@alfasin指出的那样,你不能只是在迭代它时从列表中删除元素。这搞砸了索引。只需检查元素是否已经在列表中,只有在元素中才添加。