Trying to remove an object with list iterator

假装没事ソ 提交于 2019-12-03 17:34:22
  1. Do not remove an item from a list directly. Use the remove() method in the iterator.

  2. Your code is also flawed in that it assumes there are additional list items:

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

    Here you call next() twice, yet you've only called hasNext once. Perhaps you meant:

    while(listIterator.hasNext()){
        Book b = listIterator.next();
        if (b.getBookTitle().equals(bookName)) { 
          // ...
    
  3. Finally, you can replace:

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

    with

    listIterator = books.listIterator();
    

instead of books.remove(b)

use

listIterator.remove();

the reason is, that the iterator gives you the next() book, if you only remove the book from books, the iterator has the "removed" book still as next book.

it did not work in your code, because you called .next() twice, once for the book b and a second time when comparing the book title, with the next book.

instead of books.remove(b)

try to use

   listIterator.remove();

You can NOT remove an item from an ArrayList while iterating.

you can either :

  • Use the remove() method of the ListIterator (at most once for each next())
  • Use another List implementation, like CopyOnWriteArrayList, wich is garanteed never to throw an ConcurrentModificationException, but this is probably overkill in your case.

You cannot remove an item whilst iterating a list, you should use .remove()

Also remove this:

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

This is not 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);
}

You can try the above code. I think it will able to solve your problem, that you have facing that java.util.ConcurrentModificationException" error. for more reference on the error please follow the link

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!