【发布时间】:2019-07-06 14:00:43
【问题描述】:
我想迭代一个 Set,如果满足某些条件,我想向它添加元素。 当我这样做时,我得到“ConcurrentModificationException”。 当我寻找答案时,我发现在 listIterator 的情况下,我们有 add() 和 remove() 方法,但我不能使用 list,因为我还必须处理重复项。
请提出实现此目的的方法。
编辑:
int[] A = {1,2,3,4,5,10,6,7,9};
Set<Integer> s = new HashSet<>();
s.add(1);
Iterator i = s.iterator();
while(i.hasNext()){
int temp = i.next();
int x = next element of array A;
if(x%2==0){
s.add(temp*x);
}
}
但它正在抛出 ConcurrentModificationException。
【问题讨论】:
-
帮助我们帮助你 - 请分享一个样本集,以及你想要得到的结果。
-
将创建的对象添加到另一个集合中,当循环完成后,将新集合的所有元素添加到集合中?
-
我多次添加元素,所以不能每次都创建新对象。
-
HashSet 没有排序。因此,即使允许这样做,您也无法确定迭代器是否会返回您刚刚添加的元素。使用列表,在将新元素添加到列表之前,检查它是否已经存在于集合中。如果没有,则将该元素添加到列表和集合中。当然,除非数组太短以至于使用集合是多余的,并且您可以检查列表是否已经包含该元素。
-
但是每次检查元素是否已经存在于列表中需要额外的时间。