如何在Java中遍历Set并向其中添加元素?

时间:2019-07-06 14:00:43

标签: java iterator set

我想遍历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。

1 个答案:

答案 0 :(得分:0)

  

如何在Java中遍历Set并向其中添加元素?

无法完成。当然,不能使用HashSetTreeSet。您可能需要寻找一种不依赖于此的另一种算法编码方式。

通常的解决方案是创建一个临时列表,将元素添加到该列表中,然后在完成迭代后使用addAll将列表元素添加到集合中。但这在这里不起作用,因为您似乎希望迭代器看到已添加的新元素。

第二种方法是使用ConcurrentHashMapCollections::newSetFromMap而不是HashSet。迭代并发集合不会产生ConcurrentModificationException。但是,不利的一面是,不能保证迭代器会看到在迭代过程中添加的所有元素。因此,对于您的示例,这可能(可靠地)行不通。