试图删除对象与列表迭代器(Trying to remove an object with list

2019-08-31 12:02发布

我试图从使用列表迭代器列表中删除的对象。 我已经通过网站上的其他解决方案了,没有缓解了主“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

    }
    }

Answer 1:

  1. 不要从列表中直接删除的项目。 使用remove()的iterator方法。

  2. 您的代码也有缺陷,因为它假定有其他列表项:

     while(listIterator.hasNext()){ Book b = listIterator.next(); if (listIterator.next().getBookTitle().equals(bookName)) { // eek 

    在这里,你调用next()两倍,但你只叫hasNext一次。 也许你的意思是:

     while(listIterator.hasNext()){ Book b = listIterator.next(); if (b.getBookTitle().equals(bookName)) { // ... 
  3. 最后,可以更换:

     while(listIterator.hasPrevious()) { listIterator.previous(); } 

     listIterator = books.listIterator(); 


Answer 2:

代替books.remove(b)中

使用

listIterator.remove();

其原因是,迭代器让你的下一个()的书,如果你只从书本上移除的书籍,迭代器有“删除”书中仍下一本书。

它没有在你的代码)的书B和比较书名时,与下一本书第二次不行的,因为你所谓的.next(两次,一次。



Answer 3:

代替books.remove(b)

尝试使用

   listIterator.remove();


Answer 4:

你不能从一个删除一个项目ArrayList ,而迭代。

您可以:

  • 使用的remove()方法ListIterator (最多一次为每个未来())
  • 使用另一个List实现,像的CopyOnWriteArrayList ,至极的保证下,永远不会抛出ConcurrentModificationException ,但是这可能是你的情况矫枉过正。


Answer 5:

无法删除的项目,而迭代的列表,你应该使用一个.remove()

也删除此:

while(listIterator.hasPrevious()) {
    listIterator.previous();
}

这不是neccesary



Answer 6:

{   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”的错误。关于此错误的更多参考,请跟随链接



文章来源: Trying to remove an object with list iterator