gpt4 book ai didi

java - 如果找到正确的值,在循环中清除 Set 是否安全?

转载 作者:行者123 更新时间:2023-11-30 10:40:25 25 4
gpt4 key购买 nike

我处于这种情况:如果我在 HashSet 中找到一个特定值,我必须更新一个字段,清除该集合并返回该字段。这里有一个例子:

static Set<Integer> testSet = new HashSet<>();
static Integer myField = null; // the field could be already != null

public static int testClearSet()
{
for (int i = 0; i < 100; i++) { // this is just for the test
testSet.add(i);
}
for (Integer n : testSet) {
if (n == 50) {
myField = n;
testSet.clear();
return myField;
}
}
return -1;
}

我想知道对集合这样做是否安全,考虑到以后我应该重用该集合这一事实。

我问这个是因为我知道在迭代时对集合进行更改不是“好的做法”,但我认为这种情况有点不同。

一个可能的解决方案是:

boolean clear = false;
for (Integer n : testSet) {
if (n == 50) {
myField = n;
clear = true;
break;
}
}
if (clear) {
testSet.clear();
return myField;
}

那么,哪种方式才是正确的呢?

最佳答案

使用显式迭代器时,从集合中删除元素应该是安全的。因此,以下内容应该是安全的:

Iterator<Integer> iterator = testSet.iterator();
while (iterator.hasNext()) {
Integer element = iterator.next();
if (element.intValue() == 50) {
testSet.clear();
break;
}
}

关于java - 如果找到正确的值,在循环中清除 Set 是否安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38915707/

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