作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想迭代一个 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?
这是不可能的。当然,不能使用 HashSet
或 TreeSet
。您可能需要找到一种不依赖于此的替代方法来编写算法。
正常的解决方案是创建一个临时列表,向该列表添加元素,然后在完成迭代后使用 addAll
将列表元素添加到集合中。但这在这里不起作用,因为您似乎希望迭代器看到您添加的新元素。
第二种方法是使用 ConcurrentHashMap
和 Collections::newSetFromMap
而不是 HashSet
。迭代并发集合不会给出 ConcurrentModificationException
。然而,不利的一面是,不能保证迭代器会看到迭代期间添加的所有元素。因此,这对于您的示例可能不起作用(可靠)。
关于java - 如何在java中迭代Set并向其中添加元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56914804/
我是一名优秀的程序员,十分优秀!