【发布时间】:2019-09-11 04:58:44
【问题描述】:
即使使用迭代器,我在删除列表的第一个和第二个元素时也遇到问题。
我已阅读以下主题,但无法解决我的问题(那些是最相关的,但我也查看了其他材料):
ConcurrentModificationException when trying remove element from list
所以我的代码如下所示:
List<List<String>> list = cnf.read();
List<List<String>> nlist = new ArrayList<>();
for (List<String> l : list) {
if (l.size() <= 3) {
nlist.add(l);
} else {
int size = l.size();
while (size > 3) {
List<String> three = l.subList(0, 2);
three.add("Y" + (count++));
//Iterator itr = l.iterator();
ListIterator itr = l.listIterator();
int v = 0;
while (itr.hasNext()) {
itr.next();
if (v == 0 || v == 1) {
itr.remove();
v++;
}
}
l.add(0, "Y" + (count++));
size--;
nlist.add(three);
}
nlist.add(l);
}
}
for (List<String> l : nlist) {
System.out.println(l.toString());
System.out.println(l.size());
}
我在此处的打印语句中收到 ConcurrentModificationException :
System.out.println(l.toString());
我也尝试在我的 2 个 for 循环中使用迭代器,但这似乎没有什么不同! 我是发布问题的新手,所以如果我做得对,请告诉我! 谢谢。
【问题讨论】:
-
你熟悉界面
java.util.ListIterator吗?根据其javadoc,它允许在遍历列表时修改列表。 -
@Abra 是的!我正在使用迭代器来执行 itr.remove()。这应该允许我从列表中删除我想要的项目。但是,它会导致异常。我的猜测是,这是因为它位于另一个循环(嵌套)中,所以它会导致问题。我不知道如何解决它。
-
您发布的代码不包含ListIterator。
-
@Abra 所以这行:Iterator itr = l.iterator();不是 ListIterator 而是简单的 Iterator?我现在正在检查它以找到解决方案。这可能是一个线索。
-
即使使用 ListIterator it = l.listIterator();。我得到同样的例外。正如我从以下帖子中了解到的那样:techdifferences.com/… 这两种方法的主要区别在于列表迭代器允许您修改和元素并双向遍历列表。