#java #list #iterator
#java #Список #итератор
Вопрос:
У меня есть программа, в которой мне нужно создать пользовательский итератор связанного списка для созданного мной класса связанного списка. Все работает, как ожидалось, но мой метод удаления вообще не работает. Вот источник:
public class LinkedListIterator implements Iterator<T>{
ListNode<T> current = head, previous = null;
boolean canRemove = false;
public boolean hasNext() {
return current != null;
}
public T next() {
if(hasNext()==false){
throw new IllegalStateException("hasNext was false!");
}
canRemove = true;
previous = current;
current = current.getNext();
return previous.getValue();
}
public void remove(){
if(canRemove == true){
previous.setNext(current.getNext());
canRemove = false;
}
}
}
Комментарии:
1. Определите «не работает». (Я подозреваю, что для форматирования этой первой строки кода вам нужен дополнительный перевод строки между вашим абзацем и вашим кодом)
2. Некоторые примечания, не связанные с вашей проблемой: Согласно документации к
Iterator<E>
,next
следует выбрасыватьNoSuchElementException
, когда нет следующего элемента.remove
должен выдавать результатIllegalStateException
, если вызван до того, какnext
был или еслиremove
был вызван во второй раз, прежде чемnext
был вызван снова.3. Ваша
hasNext
функция тоже не кажется правильной…