gpt4 book ai didi

java - 在 Java 中,您可以在迭代 List 时修改它吗?

转载 作者:IT老高 更新时间:2023-10-28 20:53:46 27 4
gpt4 key购买 nike

我知道在 Java 中是 Collection<E>不应在迭代时修改,例如删除或添加元素。但是如何改变 List 中的元素呢?例如,如果我们有

List<String> letters = new ArrayList<String>();
letters.add("A");
letters.add("B");
letters.add("C");
int i = 0;

for (String letter : letters) {
letters.set(i, "D");
i++;
}

所以,我不是在谈论修改存储在元素中的对象。我说的是改变对象的what。 List 的大小没有改变,但索引处的对象正在改变,所以从技术上讲,List 正在被修改。我的老板声称这段代码很好(而且看起来确实有效),但我仍然认为它不正确。使用 ListIterator 的 set(E e) 方法可能会更好吗?

最佳答案

在遍历列表的同时修改列表中的元素的想法并没有错(不要修改列表本身,不建议这样做),但可以更好地表达为:

for (int i = 0; i < letters.size(); i++) {
letters.set(i, "D");
}

最后,整个列表将以字母 "D" 作为其内容。在这种情况下使用增强的 for 循环不是一个好主意,您没有将迭代变量用于任何事情,而且您不能使用迭代变量修改列表的内容。

请注意,上面的代码段没有修改列表的结构 - 意思是:没有添加或删除任何元素,列表的大小保持不变。简单地将一个元素替换为另一个元素不算作结构修改。这是link对于@ZouZou 在评论中引用的文档,它指出:

A structural modification is any operation that adds or deletes one or more elements, or explicitly resizes the backing array; merely setting the value of an element is not a structural modification

关于java - 在 Java 中,您可以在迭代 List 时修改它吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20639098/

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