我想遍历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。
答案 0 :(得分:0)
如何在Java中遍历Set并向其中添加元素?
无法完成。当然,不能使用HashSet
或TreeSet
。您可能需要寻找一种不依赖于此的另一种算法编码方式。
通常的解决方案是创建一个临时列表,将元素添加到该列表中,然后在完成迭代后使用addAll
将列表元素添加到集合中。但这在这里不起作用,因为您似乎希望迭代器看到已添加的新元素。
第二种方法是使用ConcurrentHashMap
和Collections::newSetFromMap
而不是HashSet
。迭代并发集合不会产生ConcurrentModificationException
。但是,不利的一面是,不能保证迭代器会看到在迭代过程中添加的所有元素。因此,对于您的示例,这可能(可靠地)行不通。