我正在尝试创建一个RetainAll方法,并且在搜索了所有论坛之后,我发现在我的特定情况下没有任何帮助。我遇到的问题是,在运行程序时,不是将所有元素保留在指定列表中并删除所有其他元素,而是将最后一个元素保留在初始列表中。
public default boolean retainAll(Collection<?> c) {
boolean modified=false;
int index =0;
for(Object e : this) {
if(c.contains(e)==true) {
}
else if(c.contains(e)==false) {
index=this.indexOf(e);
this.remove(index);
modified = true;
}
}
return modified;
}
public default boolean remove(Object e) {
if (indexOf(e) >= 0) {
remove(indexOf(e));
return true;
}
else
return false;
}
我只是不了解如何删除最后一个元素。
答案 0 :(得分:0)
您正在遍历集合时对其进行修改。通常这是导致不幸的秘诀。
对于标准集合,安全的方法是使用显式迭代器,并使用迭代器的'remove'方法删除最近返回的条目。
如果这是您自己的集合实现,则应确保该模型也适用。