在Java中,您可以在遍历列表时修改它吗?

我了解在Java中,Collection<E>不应在遍历Java时对其进行修改,例如删除或添加元素。但是,如何更改列表中的元素呢?例如,如果我们有

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++;

}

因此,我不是在谈论修改存储在某个元素上的对象;我说的是改变对象是 什么

。List的大小未更改,但是索引处的对象正在更改,因此从技术上讲,List也在被修改。我的老板声称此代码很好(并且确实可以正常工作),但我仍然认为它是不正确的。是否可以使用ListIterator的set(E

e)方法更好地做到这一点?

回答:

在遍历列表时修改列表中的元素没有什么错(不要修改列表本身,不建议这样做),但是可以这样更好地表达它:

for (int i = 0; i < letters.size(); i++) {

letters.set(i, "D");

}

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

请注意,以上代码段 并未 修改列表的结构-

含义:未添加或删除任何元素,列表的大小保持不变。简单地将一个元素替换为另一个元素不算作结构修改。这是@ZouZou在评论中引用的文档的链接,其中指出:

结构修改是添加或删除一个或多个元素,或显式调整后备数组大小的任何操作;仅设置元素的值不是结构上的修改

以上是 在Java中,您可以在遍历列表时修改它吗? 的全部内容, 来源链接: utcz.com/qa/433008.html

回到顶部