Java - 在迭代时将元素添加到列表中

Tru*_*rup 22 java iterator arraylist

我想避免得到ConcurrentModificationException.我该怎么办?

Edw*_*rzo 42

您可以ListIterator在迭代过程中使用支持remove/add方法的方法.

ListIterator<Book> iter = books.listIterator();
while(iter.hasNext()){
    if(iter.next().getIsbn().equals(isbn)){
        iter.add(new Book(...));
    }
}
Run Code Online (Sandbox Code Playgroud)


Jim*_*imN 10

您可以使用带索引的for循环,而不是使用迭代器.例如:

int originalLength = list.length();
for (int i = 0; i < originalLength; i++) {
  MyType mt = list.get(i);
  //... processing
  //... insertions
}
Run Code Online (Sandbox Code Playgroud)

  • @Edwin如果用户使用的是LinkedList,那么这是一个公平的观点,问题确实有'arraylist`标签. (2认同)

Kei*_*all 6

你想用一个ListIterator.您可以从任何类型的列表中获取其中一个,但为了提高效率,您可能希望从中获取一个LinkedList.

import java.util.*;
class TestListIterator {
  public static void main(String[]args) {
    List<Integer> L = new LinkedList<Integer>();
    L.add(0);
    L.add(1);
    L.add(2);
    for (ListIterator<Integer> i = L.listIterator(); i.hasNext(); ) {
      int x = i.next();
      i.add(x + 10);
    }
    System.out.println(L);
  }
}
Run Code Online (Sandbox Code Playgroud)

打印[0, 10, 1, 11, 2, 12].