当前位置: 首页 > 面试题库 >

在Java中进行迭代时如何在List中添加元素?

宗政法
2023-03-14
问题内容

假设我有一个清单,例如:

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具有随机访问权限。链表则没有。



 类似资料:
  • 问题内容: 我们无法对从.. 获得的集合执行或操作,仅允许进行remove操作。 因此,如果遇到需要在其中添加新元素而不删除其中的先前元素的情况,该怎么办?我该如何实现? 问题答案: 使用构造函数创建一个新的:

  • 问题内容: 我想写这样的代码- 但是我也 尝试使用,但是我得到了相同的结果 问题答案: 解释原因 for- each循环也在内部创建的迭代器的。在遍历map时,您已经通过将值再次放入map()来修改了map的结构,这会导致这种情况。 甚至在文档中也对此做了很好的解释- 此类的所有“集合视图方法”返回的迭代器都是快速失败的:如果在创建迭代器后的任何时间对结构进行结构修改,则除了通过迭代器自己的rem

  • 问题内容: 在迭代集合时是否可以向集合中添加元素? 更具体地说,我想遍历一个集合,如果一个元素满足特定条件,我想向集合中添加一些其他元素,并确保也对这些添加的元素进行遍历。(我意识到这可能会导致循环终止,但是我很确定不会发生这种情况。) Sun 的Java教程建议不可能:“请注意,这是在迭代过程中修改集合的唯一安全方法;如果在迭代进行过程中对基础集合进行了其他任何修改,则行为未指定。” 因此,如果

  • 本文向大家介绍如何在Java ArrayBlockingQueue中添加元素?,包括了如何在Java ArrayBlockingQueue中添加元素?的使用技巧和注意事项,需要的朋友参考一下 要将元素添加到ArrayBlockingQueue类,请使用方法。 语法如下: 此处,ele是要添加到队列中的元素。 要使用ArrayBlockingQueue类,您需要导入以下包: 以下是在Java Arr

  • 是否可以在java中并行地迭代一个集合。我正在中寻找类似C#的东西-命名空间

  • 问题内容: 我有一个DataFrame来自pandas的: 输出: 现在,我要遍历该框架的行。对于每一行,我希望能够通过列名访问其元素(单元格中的值)。例如: pandas有可能这样做吗? 我发现了类似的问题。但这并不能给我我所需的答案。例如,建议在那里使用: 要么 但是我不了解row对象是什么以及如何使用它。 问题答案: 是一个生成器,它同时生成索引和行(作为系列):