Исследование вывода методов HashMap в Kotlin

Будут напечатаны null, null, −1, 0, 1, 2, затем {missing key 6=2}. Значение по умолчанию withDefault использует getValue, но не обычные get и квадратные скобки.

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

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

Будут напечатаны null, null, −1, 0, 1, 2, затем {missing key 6=2}. Значение по умолчанию withDefault использует getValue, но не обычные get и квадратные скобки.

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

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

Условие

Определите, какой текст появится в консоли после выполнения следующей программы.

fun main(args: Array<String>) {

    val dict = HashMap<String, Int>().withDefault { -1 }
    println(dict["missing key 1"])
    println(dict.get("missing key 2"))
    println(dict.getValue("missing key 3"))
    println(dict.getOrDefault("missing key 4", 0))
    println(dict.getOrElse("missing key 5") { 1 })
    println(dict.getOrPut("missing key 6") { 2 })
    println(dict)
}

Вопрос: какие значения будут напечатаны на каждой строке вывода?

Ответ

Будут напечатаны null, null, −1, 0, 1, 2, затем {missing key 6=2}. Значение по умолчанию withDefault использует getValue, но не обычные get и квадратные скобки.

getOrDefault возвращает переданный 0, getOrElse вычисляет 1, не добавляя запись. Только getOrPut вставляет отсутствующий ключ со значением 2, поэтому в финальной карте одна запись. getValue возвращает −1 из обёртки withDefault, но тоже не сохраняет его в карте.

Источник: kotlinlang.org.

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

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

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

Подробнее