我试图从使用列表迭代器列表中删除的对象。 我已经通过网站上的其他解决方案了,没有缓解了主“java.util.ConcurrentModificationException‘错误’在线程异常”
这里是我的代码不能执行:
void PatronReturn(String bookName) {
// get to beginning
while(listIterator.hasPrevious()) {
listIterator.previous();
}
while(listIterator.hasNext()){
Book b = listIterator.next();
if (listIterator.next().getBookTitle().equals(bookName)) {
//listIterator.next();
//listIterator.remove();
books.remove(b);
//listIterator.next(); //moves to next so iterator can remove previous ?
//books.remove(listIterator.next());; // TODO see if this is correct
}
}
代替books.remove(b)中
使用
listIterator.remove();
其原因是,迭代器让你的下一个()的书,如果你只从书本上移除的书籍,迭代器有“删除”书中仍下一本书。
它没有在你的代码)的书B和比较书名时,与下一本书第二次不行的,因为你所谓的.next(两次,一次。
你不能从一个删除一个项目ArrayList
,而迭代。
您可以:
- 使用的remove()方法
ListIterator
(最多一次为每个未来()) - 使用另一个
List
实现,像的CopyOnWriteArrayList ,至极的保证下,永远不会抛出ConcurrentModificationException
,但是这可能是你的情况矫枉过正。
无法删除的项目,而迭代的列表,你应该使用一个.remove()
也删除此:
while(listIterator.hasPrevious()) {
listIterator.previous();
}
这不是neccesary
{ Book toBeReaplced = null; Book tempBook = null;
void PatronReturn(String bookName)
{// get to beginning
while(listIterator.hasPrevious()) { listIterator.previous();
}
while(listIterator.hasNext()){
Book tempBook = listIterator.next();
if (b.getBookTitle().equals(bookName)) {
toBeReaplced = tempBook;
}
listIterator.remove(bookToBeReplaced);
}
你可以试试上面的代码。 我认为这将能解决你的问题,你已经面临着java.util.ConcurrentModificationException”的错误。关于此错误的更多参考,请跟随链接