我正在尝试使用列表迭代器从列表中删除对象.我已经浏览了网站上的其他解决方案,并没有减轻错误"线程中的异常"主"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
}
}
Run Code Online (Sandbox Code Playgroud)
Dun*_*nes 11
不要直接从列表中删除项目.remove()在迭代器中使用该方法.
您的代码也存在缺陷,因为它假定还有其他列表项:
while(listIterator.hasNext()){
Book b = listIterator.next();
if (listIterator.next().getBookTitle().equals(bookName)) {
// eek
Run Code Online (Sandbox Code Playgroud)
你打电话next()两次,但你只打了hasNext一次电话.也许你的意思是:
while(listIterator.hasNext()){
Book b = listIterator.next();
if (b.getBookTitle().equals(bookName)) {
// ...
Run Code Online (Sandbox Code Playgroud)最后,您可以替换:
while(listIterator.hasPrevious()) {
listIterator.previous();
}
Run Code Online (Sandbox Code Playgroud)
同
listIterator = books.listIterator();
Run Code Online (Sandbox Code Playgroud)而不是books.remove(b)
使用
listIterator.remove();
Run Code Online (Sandbox Code Playgroud)
原因是,迭代器为你提供了下一本()书,如果你只从书中删除这本书,那么迭代器的"已删除"书仍然是下一本书.
它在你的代码中不起作用,因为你调用.next()两次,一次是针对书b,第二次是将书名与下一本书进行比较.