Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Memory 为什么不删除重复副本?_Memory_Arraylist_Duplicates - Fatal编程技术网

Memory 为什么不删除重复副本?

Memory 为什么不删除重复副本?,memory,arraylist,duplicates,Memory,Arraylist,Duplicates,我希望能够将itemOrders添加到ArrayList,然后检查itemOrder是否已经存在。如果特定的itemOrder已经在ArrayList中,我只希望保留一个副本。我不明白为什么这不是删除重复副本。我甚至尝试过将itemOrder转换为字符串,检查字符串是否相同,然后以这种方式删除,但我无法让它工作。我做错了什么有什么帮助吗 public void add(ItemOrder itemOrder) { this.list.add(itemOrder);

我希望能够将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 ItemOrder){
此.list.add(itemOrder);
for(int i=0;i
我得到这样的结果

内存格式

[ItemOrder@4d459b26]

[ItemOrder@4d459b26, ItemOrder@343d0d2b]

[ItemOrder@4d459b26, ItemOrder@343d0d2b, ItemOrder@142b9cd8]

字符串格式

[傻乎乎的油灰,3.95(19.99分为10),1]

[傻乎乎的油灰,3.95(10代表19.99),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的内存,因为这不一样,它让一个副本通过。我怎样才能解决这个问题

所以我认为正在发生的是,它检查itemOrder的内存,因为这不一样,它让一个副本通过。我怎样才能解决这个问题

是的,这是默认行为

如果希望比较对象的状态/内容,则必须实现
等于
(如果这样做,还必须实现
哈希代码
,以匹配它)


除此之外,正如@alfasin所指出的,您不能在遍历列表时从列表中删除元素。这会弄乱索引。只需检查该元素是否已在列表中,如果不在列表中,则只添加它。

您是否为您的
ItemOrder
正确地实现了
equals
?我不确定如何实现equals。我是否必须转到ItemOrder类并在那里添加一个方法?此外,我希望它能够更新,所以我总是希望新的ItemOrder发生。因此,如果我检查,它已经在那里,我想更换它。