【发布时间】:2014-01-05 12:10:08
【问题描述】:
我了解在 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) 方法可能会更好吗?
【问题讨论】:
-
如果您不打算使用变量字母,为什么还要
foreach?为什么不试试看它是否有效? -
问这个问题之前你试过了吗?
-
这在文档中有所说明:“结构修改是添加或删除一个或多个元素,或显式调整后备数组大小的任何操作;仅设置元素的值 不是结构修改。”
-
谢谢邹邹。我发现,“请注意,Iterator.remove 是在迭代期间修改集合的唯一安全方法;如果在迭代过程中以任何其他方式修改底层集合,则行为未指定。”但你的陈述是我要找的。我在 javadoc 中查找了 List,但它不存在。我在 ArrayList 中看到它。谢谢。