Метод remove () Итератора в LinkedList - PullRequest
0 голосов
/ 04 июня 2018

Может кто-нибудь объяснить мне, как этот метод работает, через.это место if (next == lastReturned).Я не понимаю, в каком случае next может быть равен lastReturned.

public void remove() {
        checkForComodification();
        if (lastReturned == null)
            throw new IllegalStateException();

        Node<E> lastNext = lastReturned.next;
        unlink(lastReturned);
        if (next == lastReturned)
            next = lastNext;
        else
            nextIndex--;
        lastReturned = null;
        expectedModCount++;
    }

Спасибо за ответ!

1 Ответ

0 голосов
/ 04 июня 2018

lastReturned также может быть next, если только что использовался метод previous итератора:

public E previous() {
    checkForComodification();
    if (!hasPrevious())
        throw new NoSuchElementException();

    lastReturned = next = (next == null) ? last : next.prev; // <=====
    nextIndex--;
    return lastReturned.item;
}

Так что в этом случае (previous() затем remove()) важно, чтобыremove установить next для следующего элемента после того, который был только что удален, что и делает if (next == lastRemoved).

...