我试图在迭代列表时从List中删除一些对象。为了避免,ConcurrentModificationException,我使用Iterator并调用remove()。这部分代码如下所示。
Iterator<ClassName> it = classList.iterator();
while(it.hasNext()) {
ClassName obj = it.next();
if(obj.getData() == 1) {
it.remove(obj);
}
}
我收到以下错误:java.util.Iterator中的remove()无法应用于(ClassName)。我有两个问题
答案 0 :(得分:2)
1。为什么我会收到此编译错误以及如何解决它?
执行it.remove()
(并且不要给它任何参数)。该方法将从基础集合中删除当前对象。
2。迭代列表时从列表中删除对象是一种很好的做法(甚至是安全的)吗?
是。这是从集合中删除对象的完美方法。
答案 1 :(得分:0)
删除方法不会带任何参数,请尝试
it.remove();
如果您正在使用Iterator,则在从List中进行迭代时删除对象没有任何害处,但直接调用myList.remove(obj/index)
会导致ConcurrentModificationException。在多线程环境中应该小心。
答案 2 :(得分:0)
你应该在iterator中调用remove()
,不需要任何参数。
Iterator<ClassName> it = classList.iterator();
while(it.hasNext()) {
ClassName obj = it.next();
if(obj.getData() == 1) {
it.remove();
}
}
是迭代器是迭代时删除对象的方法。
答案 3 :(得分:0)
没有迭代器的方法将争论作为对象。
Iterator<ClassName> it = classList.iterator();
while(it.hasNext()) {
ClassName obj = it.next();
if(obj.getData() == 1) {
it.remove();
}
}
Iterator.remove()是安全的。
请注意,Iterator.remove是在迭代期间修改集合的唯一安全方法;如果在迭代进行过程中以任何其他方式修改基础集合,则行为未指定。
来自:
http://docs.oracle.com/javase/tutorial/collections/interfaces/collection.html
答案 4 :(得分:0)
尝试很多Answers提到的 it.remove(),是的,你可以删除对象,迭代列表时可以安全删除。
答案 5 :(得分:0)
为什么我会收到此编译错误以及如何修复它?
您无需将对象传递给它。将直接删除当前对象。 it.remove()
就足够了
在迭代列表时从列表中删除对象是一种很好的做法(甚至是安全的)吗?
是。可以迭代并从中删除元素。什么不好的做法/安全直接从列表对象而不是迭代器中删除。当您尝试直接从列表中删除并在其上循环时,会导致ConcurrentModificationException
。