gpt4 book ai didi

java - 迭代 Java Set 时修改元素

转载 作者:行者123 更新时间:2023-12-01 17:06:53 25 4
gpt4 key购买 nike

这里对 Java 还很陌生。我来自Python。 SO 上也有类似的问题,讨论在迭代 Java Set 时删除或添加元素。我想知道的是修改Set中包含的元素。例如,["apple", "orange"]["iapple", "iorange"]。另外,我想就地完成它,即不创建另一个集合并在迭代时将修改后的元素放入新集合中。

显然简单的 for 循环不起作用,如下所示:

import java.util.Arrays;
import java.util.Set;
import java.util.HashSet;

class Test {
public static void main (String[] args) {
Set<String> strs = new HashSet<String>(Arrays.asList("apple", "orange"));

for (String str : strs) {
str = "i" + str;
}
}
}

最佳答案

您所写内容的问题是您没有对计算值执行任何操作。 for-each 循环将 str 的值设置为每个元素。在 for 循环中,您正在更改 str 的值,但不对其执行任何其他操作。

这在链表或任何支持索引的数据结构中很容易做到,但对于集合来说可能会很棘手。仅删除旧元素并添加新元素可能会搞砸迭代,特别是因为您正在处理哈希集。

执行此操作的一个简单方法是转换为列表并返回:

class Test {
public static void main (String[] args) {
Set<String> strs = new HashSet<String>(Arrays.asList("apple", "orange"));

//Convert to list
LinkedList<String> strsList = new LinkedList<String>();
strsList.addAll(strs);

//Do modification
for (int i = 0; i < strsList.size(); i++) {
String str = strsList.get(i);
strsList.set(i,"i" + str);
}

//Convert back to set
strs.clear();
strs.addAll(strsList);
}
}

这显然比您预期的工作量要多一些,但如果大规模替换是您预期的行为,那么可能不会使用集合。我很想看看还会出现什么其他答案。

关于java - 迭代 Java Set 时修改元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25172176/

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