Обработка возможных null‑значений в методе get связного списка

Optional.ofNullable не различает отсутствующий узел и существующий узел со значением null: оба случая дадут Optional.empty(). Это ограничение выбранного контракта, не списка.

Короткий ответ

Что ответить на собеседовании

Optional.ofNullable не различает отсутствующий узел и существующий узел со значением null: оба случая дадут Optional.empty(). Это ограничение выбранного контракта, не списка.

Подробный разбор

Ответ с пояснениями

Условие

Необходимо прояснить, как должен вести себя метод get, когда сохраняемое в узле значение может быть null. Требуется выяснить, допускается ли наличие одной или нескольких таких нод и как это отражается на возвращаемом результате.

@Override
public Optional<T> get(int targetIdx) {
    // установить позицию = 0
    // проходить по цепочке пока next не будет == null
    int pos = 0;
    for (int i = 0; i < targetIdx; i++) {
        if (pos == targetIdx) {
            return Optional.ofNullable(item);
        }
        pos++;
    }
    return Optional.empty();
}

Ответ

Optional.ofNullable не различает отсутствующий узел и существующий узел со значением null: оба случая дадут Optional.empty(). Это ограничение выбранного контракта, не списка.

Нужно выбрать политику: запретить null при add, возвращать отдельный результат с признаками found/value либо получать узел, а не Optional его значения. Несколько null-узлов технически допустимы, если коллекция их разрешает. Показанный get также неверен: он не переходит по next, проверка pos == targetIdx внутри данного цикла не достигается, а индекс 0 сразу даёт empty. Корректный обход начинает с head и выполняет targetIdx переходов, проверяя существование текущего узла.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее