假设我有一个 HashSet:
我希望以这样一种方式迭代它,即对于给定的总和(如6),在迭代元素时,如果我发现
代码如下:
[1, 2, 3, 4, 5, 6]
我希望以这样一种方式迭代它,即对于给定的总和(如6),在迭代元素时,如果我发现
Set
中有2个元素的总和等于6,则我想移除另一个元素。例如,如果我正在迭代1,则应删除5。我尝试做如下操作:HashSet<Integer> hs = new HashSet(arr);
int sum = 6;
for(int num : hs) {
if(hs.contains(sum - num)) {
hs.remove(sum - num);
}
}
显然会抛出 java.util.ConcurrentModificationException
异常。另一种方法是使用迭代器,但它会删除当前元素,并且不会将任何其他元素作为参数。还有什么其他的选择?
更新:我知道使用额外的集合等技巧。我只想要一个非常优化的解决方案,而不会增加时间和空间复杂度,如果可能的话。