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

标签 java iterator set

我想迭代一个 Set,如果满足某些条件,我想向其中添加元素。 当我这样做时,我收到“ConcurrentModificationException”。 当我寻找答案时,我发现在 listIterator 的情况下,我们有 add() 和 remove() 方法,但我不能使用列表,因为我还必须处理重复项。

请提出一种实现此目的的方法。

编辑:

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。

最佳答案

How to iterate over Set and add elements to it in java?

这是不可能的。当然,不能使用 HashSetTreeSet。您可能需要找到一种不依赖于此的替代方法来编写算法。

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

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

关于java - 如何在java中迭代Set并向其中添加元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56914804/

相关文章:

java - Java 或 C# 中是否存在命名空间污染(如在 C++ 中)?

java - 为什么 Collections.max() 不返回字符串集合的实际最大值?

java - 如何在不缓存 hadoop 1.0.3 的情况下多次迭代 hadoop reduce 值?

c++ - move_iterator 是做什么用的

algorithm - 包含超集

python - 基于字符串方法的Python集合的子集

java - Weblogic 10.3.5 Web应用程序启动错误

java - 如何保留动态创建的 Camel 路线?

c++ - 设置不插入

从字符串解析通用枚举集的 Java 静态方法