首页 > 解决方案 > java - 如何在Java中迭代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。

标签: javaiteratorset

解决方案


java - 如何在Java中迭代Set并向其添加元素?

这是不可能的。当然,不是用HashSetor TreeSet。您可能需要找到一种不依赖于这样做的替代方法来编码您的算法。

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

第二种方法是使用 a ConcurrentHashMapandCollections::newSetFromMap而不是 a HashSet。迭代并发集合不会给出ConcurrentModificationException. 然而,另一方面是不能保证迭代器会看到迭代期间添加的所有元素。因此,对于您的示例,这可能(可靠地)不起作用。


推荐阅读