Будут напечатаны null, null, −1, 0, 1, 2, затем {missing key 6=2}. Значение по умолчанию withDefault использует getValue, но не обычные get и квадратные скобки.
Исследование вывода методов HashMap в Kotlin
Будут напечатаны 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.