在Java中进行迭代时如何在List中添加元素?
问题内容:
假设我有一个清单,例如:
List<String> list = new ArrayList<>();
list.add("a");
list.add("h");
list.add("f");
list.add("s");
在遍历此列表时,我想在列表末尾添加一个元素。但是我不想遍历新添加的元素,也就是我想遍历列表的初始大小。
for (String s : list)
/* Here I want to add new element if needed while iterating */
有人可以建议我该怎么做吗?
问题答案:
您不能为此使用foreach语句。foreach在内部使用迭代器:
此类的迭代器和listIterator方法返回的迭代器是快速失败的:如果在创建迭代器之后的任何时间以任何方式对列表进行结构修改,则除了通过迭代器自己的remove或add方法之外,迭代器都会抛出ConcurrentModificationException。
(来自ArrayList javadoc)
在foreach语句中,您无权访问迭代器的add方法,在任何情况下,它都不是所需的添加类型,因为它不会在末尾追加。您需要手动遍历列表:
int listSize = list.size();
for(int i = 0; i < listSize; ++i)
list.add("whatever");
请注意,这仅对允许随机访问的列表有效。您可以通过检查列表是否实现RandomAccess标记接口来检查此功能。ArrayList具有随机访问权限。链表则没有。