gpt4 book ai didi

java - 如何在Java上正确编写retainAll方法

转载 作者:行者123 更新时间:2023-12-01 19:59:44 32 4
gpt4 key购买 nike

@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;
}

所以基本上我想通过一个包含“Hey, 1 ,2, 3, 4, Bro ”的 listA 来调用这个方法。在 keepAll() 的参数中,我有一个名为 listB 的数组列表的集合,其中包含两个元素“Hey”和“Bro”。调用此方法后,listA 应该只包含“Hey”和“Bro”。我调试了一下,但不知道代码哪里错了。任何帮助都会很棒。所以调用它会如下所示

listA.retainAll(ListB)

最佳答案

您正在迭代错误的列表 - 您迭代 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;
}

关于java - 如何在Java上正确编写retainAll方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48457407/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com