java从两个自定义对象列表中删除公共元素
在下面的代码中,我有两个图像对象列表(fromTagList和fromImageList)。image类具有一个属性image URL。两个列表中都有公共对象
我的目标是根据URL属性检测这些公共元素,并将它们从两个列表中删除,这样两个列表都将包含不同的元素,然后我将两个列表合并为一个列表,这样合并后的列表将包含不同的对象。问题是我使用的下面的方法没有删除所有公共元素,因为我认为这样会跳过一些索引
for (int i = 0; i < fromTagList.size(); i++) {
for (int k = 0; k < fromImageList.size(); k++) {
if (fromTagList.get(i).getImageURL().equals(fromImageList.get(k).getImageURL())) {
fromTagList.remove(i);
fromImageList.remove(k);
}
}
}
# 1 楼答案
每当需要维护UNIQ元素时,请考虑使用set & lt;gt;。java中的set接口专门用于处理uniq元素。您可以按照以下方法将列表转换为集合:
重写image对象的equals和hashcode方法(仅使用url属性作为equality和hascode的条件)。现在将这两个列表添加到一个集合中。把场景转换成列表,瞧!! 例如:
然后--
这是包含所有唯一对象的最终列表
# 2 楼答案
。移除(index)拿走元素,这会使列表变短,但是索引不考虑,并继续添加1,但实际上超过2个元素(+ 1和移除的元素)。p>
这对于内联删除重复的元素是有效的,但当一个列表包含重复的元素时,它会失败。它适用于列表中没有重复元素的情况,因为我向后遍历元素。请注意标签上的“继续”
如果你想支持重复元素的列表,我不认为你可以边删除边删除。我建议在新的元素列表中添加要删除的元素
# 3 楼答案
是的,你确实有索引的问题,问题是当你从列表中删除一些东西时,比如在位置i=10,位置11的元素将在第10位,而我将在11位,所以你会错过这个元素,第二个问题是当你从第二个列表中删除k indexer时,你应该打破,为了不处理所有的rest元素(除非找到的元素不重复),在尝试代码之后,我给出了以下答案:
# 4 楼答案
我会编一本字典。反复浏览每个列表(分别)。对于每个对象,将其推送到字典上,键为其URL。这样,具有相同URL的任何对象都将在字典中显示为一个键值对。将所有内容添加到词典后,将词典转换为列表