gpt4 book ai didi

java - 在迭代中从 HashSet 中删除元素

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:44:36 26 4
gpt4 key购买 nike

假设我有一个HashSet:

[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。另一种方法是使用迭代器,但它会删除当前元素并且不会将任何其他元素作为参数。我还能用什么?

更新:我知道使用额外集合和所有集合的技巧。如果可能的话,我只是想要一个非常优化的解决方案,而不会增加时间和空间的复杂性。

最佳答案

保留一组您找到的连续数字。

这将使您拥有一次性解决方案。

从一个空的运行集开始,然后遍历您的数字集。对于您遍历的每个元素,如果其求和补语在集合中,则将其从迭代器中移除。否则,将其添加到运行集中。

HashSet<Integer> hs = new HashSet(arr);
HashSet<Integer> running = new HashSet();
int sum = 6;
Iterator<Integer> iter = hs.iterator();
while (iter.hasNext()) {
int num = iter.next();
if (running.contains(sum - num)) {
iter.remove();
} else {
running.add(num);
}
}

这段代码会修改原来的HashSet,两个HashSet在代码块的末尾都包含相同的内容。在这种情况下,最好只使用代码末尾设置的 running 而不要修改原始代码。这将使这段代码更加灵活和可重用。

关于java - 在迭代中从 HashSet 中删除元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29803913/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com