В вашем коде есть ошибка:
for (int i = 0; i < booksBorrowed.size(); i++){
if (booksBorrowed.get(i).getISBN() == isbn){
booksBorrowed.get(i).returnBook();
booksBorrowed.remove(i);
}
}
Она пропускает следующие элементы после удаленных.Например, когда вы удалили «0-й» элемент, 1-й становится 0-м, но этот код не проходит через него.
Это правильная версия:
for (int i = booksBorrowed.size() - 1; i >= 0; i--){
if (booksBorrowed.get(i).getISBN() == isbn){
booksBorrowed.get(i).returnBook();
booksBorrowed.remove(i);
}
}
Но это не самый лучшийподход, потому что это сложность O (n ^ 2).
Лучше добавить все сохраненные элементы в другую коллекцию, а затем скопировать их обратно в исходный список с усеченным размером.Это сложность O (n).Конечно, это важно только в том случае, если нужно удалить много элементов.
Удаление PS в итераторе разрыва для каждой конструкции, поэтому в данном случае это недопустимый способ обработки списка.
Но вы можете сделать следующее:
for (Iterator<String> i = a.iterator(); i.hasNext();) {
Book next = i.next();
if (book.getISBN() == isbn){
book.returnBook();
i.remove(i);
}
}
Опять же, в этом случае сложность O (n ^ 2).