实际上,在按下一个按钮后,我有一个方法可以检查itemStorico ArrayList中是否存在从itemModel添加的新项,然后如果该项存在于名为itemModel的新列表中,我将从itemStorico中删除旧项并添加新项,否则只添加新项而不删除旧项。
但我得到以下错误:
2018-12-11 16:34:04.067 29033-29033/it.gabtamagnini.realco E/AndroidRuntime: FATAL EXCEPTION: main
Process: it.gabtamagnini.realco, PID: 29033
java.util.ConcurrentModificationException
at java.util.ArrayList$Itr.next(ArrayList.java:831)
at it.gabtamagnini.realco.OrdiniActivity.saveStorico(OrdiniActivity.java:1396)
at it.gabtamagnini.realco.OrdiniActivity$29.onClick(OrdiniActivity.java:1368)
at android.view.View.performClick(View.java:5637)
at android.view.View$PerformClick.run(View.java:22433)
at android.os.Handler.handleCallback(Handler.java:751)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6130)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)
下面是我的方法中的代码:
for(ItemModel itemModels : itemModel){
boolean exist = false;
for(ItemModel itemModel2 : itemStorico){
if(itemModels.getCodiceArticolo().contains(itemModel2.getCodiceArticolo())) {
itemStorico.remove(itemModel2);
itemStorico.add(itemModels);
exist = true;
}
}
if(!exist) {
itemStorico.add(itemModels);
}
}
不能从“for-each”循环(for(item:collection)
结构)内部调用remove()
。这样做将引发ConcurrentModificationException
。
如果要在循环时循环并移除项,可以使用传统的“for”循环:
for (int i = 0; i < itemStorico.size(); ++i) {
ItemModel itemModel2 = itemStorico.get(i);
if (...) {
itemStorico.remove(i);
...
}
}
但是,这会引入一个微妙的bug。假设您正在循环[a,b,c,D]
。如果您位于索引1,并从集合中删除b
,则所有内容都将“滑过”,您将得到[a,c,d]
。当您下一次查看索引2时,您将跳过C
。
您可以通过在删除时手动减少索引来避免该错误,但这有点粗略。
...
itemStorico.remove(i);
--i;
...
您还可以通过使用集合的iterator()
来完全避免这个问题。
for (Iterator<ItemModel> iterator = itemStorico.iterator(); iterator.hasNext(); ) {
ItemModel itemModel2 = iterator.next();
if (...) {
iterator.remove();
...
}
}
我试图编辑我的deletar()方法,把一个迭代器移除元素,但没有工作,错误继续。
我有一个自定义列表类的应用程序。尝试使用customer参数执行foreach函数时,会发生以下情况: 重要!我不能修改主代码 主要内容: XList类: 错误:
这段代码应该创建一组数字(集合),将20个不同的数字放入其中,并从集合中删除所有大于1的数字。但当我运行它时,出现了一个错误:ConcurrentModificationException,
我有一个假设,它有8个项目A-H,现在我想从中删除存储在int数组中的1,3,5位置项目。我该怎么做。 我正试着和你一起做这件事 但在数组的第一个被删除的项被更改之后,在下一次迭代中它删除了错误的元素或给出异常。
我使用保存通过调用方法。然后,我尝试使用方法。但当我尝试这样做时,我得到了一个。这其中的原因是什么?我应该如何解决这个问题?
问题内容: 谢谢Marko。我重写代码。尝试使其简单。这次它可以真正编译。但它只能删除彼此相邻的重复项。例如,如果我输入1 2 3 3 4 4 5 1,则输出为1 2 3 4 5 1。最后它无法拾取重复项。(顺便说一句:本网站的新内容,如果使任何显示混乱我的歉意) 这是新的代码: 问题答案: 要回答“删除java arraylist中的重复项”问题: 只需将所有元素放到中,就可以完成。 -要么-