此代码应创建一组数字(Set),将20个不同的数字放入其中,并从集合中删除所有大于1的数字。但是当我运行它时发生错误:ConcurrentModificationException,
public class Solution
{
public static void main(String[] args) throws Exception
{
HashSet<Integer> a= createSet();
a.addAll(removeAllNumbersMoreThan10(a));
for (Integer nr: a)
System.out.println(nr);
}
public static HashSet<Integer> createSet()
{
//add your code here
HashSet<Integer> set = new HashSet<Integer>();
for(int i = 0; i < 20; i++)
{
set.add(i);
}
return set;
}
public static HashSet<Integer> removeAllNumbersMoreThan10(HashSet<Integer> set)
{
//add your code here
for (Integer nr: set)
{
//System.out.println(nr);
if (nr > 10)
{
set.remove(nr);
}
}
return set;
}
}
答案 0 :(得分:1)
除非您使用std::move
,否则您在迭代时无法modify
收集。将iterator
更改为:
removeAllNumbersMoreThan10
另外,还有其他一些建议:
public static HashSet<Integer> removeAllNumbersMoreThan10(HashSet<Integer> set){
//add your code here
for (Iterator<Integer> iterator = set.iterator(); iterator.hasNext();){
//System.out.println(nr);
int nr = iterator.next();
if (nr > 10){
iterator.remove();
}
}
return set;
}
不需要修改参数中传递的集合。它需要创建一个新集,修改它并返回它。
removeAllNumbersMoreThan10
毫无意义,因为a.addAll(removeAllNumbersMoreThan10(a));
无论如何都会删除重复项。它应该是Set