我有一个ArrayList<List<String>>
,我正在尝试迭代并打印,但是,我不断获得ConcurrentModificationException
。
我的ArrayList<List<String>>
表示文本行,其中每个内部列表是一本书的一行,并包含构成该行的字符串。我想逐行打印出来。这是导致错误的代码:
public void print(ArrayList<List<String>> book) {
if (book == null) {
return;
}
for (List<String> lst : book) {
StringBuilder line = new StringBuilder();
for (String s : lst) {
line.append(s + " ");
}
// delete the extra space at the end
line.deleteCharAt(line.length() - 1);
// print out the line
System.out.println(line.toString());
}
// print out an extra newline to get ready for next input
System.out.println();
}
注意:此打印功能将书籍作为输入,这是另一个功能的输出。此其他功能仅用于解析文本文件并将单词放在ArrayList<List<String>>
格式中。
答案 0 :(得分:0)
在完成列表修改的同时迭代列表时,会引发并发修改异常。
上面你只是遍历列表,但同时别处有人改变了列表。
也许CopyOnWriteArrayList可能很有趣。但是根据您的代码,可以想象出几种解决方案。
答案 1 :(得分:-1)
这是您的错误:
你无法编辑for循环中的arraylist持有的引用
String s = line;
// delete the extra space at the end
s.deleteCharAt(s.length() - 1);
Line是来自你的lst的字符串,因为字符串是不可变的,所以更适合声明一个新的字符串