@Override
public boolean retainAll(Collection c) {
// TODO Auto-generated method stub
if(c == null)
{
throw new NullPointerException("collection is null");
}
Iterator itr = c.iterator();
while( itr.hasNext())
{
if(!c.contains(itr.next()))
{
itr.remove();
return true;
}
}
return false;
}
Run Code Online (Sandbox Code Playgroud)
所以基本上我想通过一个包含“Hey, 1 ,2, 3, 4, Bro ”的 listA 来调用这个方法。在 keepAll() 的参数中,我有一个名为 listB 的数组列表的集合,其中包含两个元素“Hey”和“Bro”。调用此方法后,listA 应该只包含“Hey”和“Bro”。我调试了一下,但不知道代码哪里错了。任何帮助都会很棒。所以调用它会如下所示
listA.retainAll(ListB)
Run Code Online (Sandbox Code Playgroud)
您正在迭代错误的列表 - 您迭代 的元素c并检查每个元素是否包含在 中c,因此您没有删除任何内容(如果您确实删除了任何内容,则会将其从错误的列表中删除)。
此外,您不应true在删除第一个应删除的元素后返回,因为您可能需要删除多个元素。
它应该是:
public boolean retainAll(Collection c) {
if(c == null)
{
throw new NullPointerException("collection is null");
}
Iterator itr = iterator(); // i.e. iterate over this list
boolean found = false;
while(itr.hasNext())
{
if(!c.contains(itr.next()))
{
itr.remove();
found = true;
}
}
return found;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2615 次 |
| 最近记录: |