listOf, setOf, mapOf: доступные только для чтения коллекции
Создавайте неизменяемые коллекции и разбирайтесь в способах доступа к ним.
«listOf, setOf, mapOf: доступные только для чтения коллекции» — бесплатный урок Kotlin Academy на CoddyKit. Это урок 1 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Kotlin Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Kotlin Academy содержит 4 уроков всего.
Три функции-конструктора
Стандартная библиотека Kotlin предоставляет listOf, setOf и mapOf для создания коллекций только для чтения. Это означает, что через интерфейс нельзя добавлять или удалять элементы.
Создание списка
listOf создаёт доступный только для чтения List<T>. Тип элементов выводится из аргументов.
fun main() {
val fruits = listOf("apple", "banana", "cherry")
println(fruits) // [apple, banana, cherry]
println(fruits.size) // 3
}Создание множества
setOf возвращает доступное только для чтения Set<T>. Дублирующиеся элементы автоматически объединяются.
fun main() {
val tags = setOf("kotlin", "java", "kotlin", "android")
println(tags) // [kotlin, java, android]
println(tags.size) // 3
}Создание отображения
mapOf принимает пары key to value и возвращает доступное только для чтения Map<K, V>.
fun main() {
val ages = mapOf("Alice" to 30, "Bob" to 25)
println(ages["Alice"]) // 30
println(ages.keys) // [Alice, Bob]
}Аннотации типов
Если выведен неправильный тип или список пуст, укажите параметры типа явно.
fun main() {
val empty: List<String> = listOf()
val numbers: List<Int> = listOf(1, 2, 3)
val emptyMap: Map<String, Int> = mapOf()
println("empty=${empty}, n=${numbers}, m=${emptyMap}")
}Пустые варианты
Используйте emptyList(), emptySet(), emptyMap(), когда явно нужна пустая коллекция. Это лучше, чем listOf() с параметром типа, если важно выразить намерение.
fun main() {
val xs = emptyList<String>()
val ys = emptySet<Int>()
val zs = emptyMap<String, Int>()
println("${xs.size}, ${ys.size}, ${zs.size}") // 0, 0, 0
}Только для чтения — значит только для чтения
В интерфейсе List нет add. Компилятор не позволяет изменять коллекцию.
fun main() {
val items = listOf(1, 2, 3)
// items.add(4) // ERROR: List has no add
val bigger = items + 4 // creates new list
println(bigger) // [1, 2, 3, 4]
}Реализация под капотом
Внутри listOf возвращает Java ArrayList, обёрнутый в неизменяемое представление. Доступность только для чтения — это контракт интерфейса, а не гарантия времени выполнения против отражения.
fun main() {
val xs = listOf(1, 2, 3)
println(xs::class.simpleName) // ArrayList
}Пары и to
Инфиксная функция to создаёт Pair<A, B> — это удобно для литералов отображений и кортежей.
fun main() {
val pair = "key" to 42
println(pair) // (key, 42)
val m = mapOf("a" to 1, "b" to 2)
for ((k, v) in m) println("$k -> $v")
}Перебор коллекций только для чтения
Коллекции только для чтения поддерживают все стандартные способы перебора: for, forEach, map, filter.
fun main() {
val nums = setOf(1, 2, 3, 4)
val doubled = nums.map { it * 2 }
println(doubled) // [2, 4, 6, 8]
}Объединение списков
Оператор + создаёт новый объединённый список, сохраняя поведение только для чтения.
fun main() {
val a = listOf(1, 2)
val b = listOf(3, 4)
val combined = a + b
println(combined) // [1, 2, 3, 4]
}Быстрая проверка
Что произойдёт при вызове add(4) для списка, созданного с помощью listOf(1, 2, 3)?
Повторение
listOf, setOf и mapOf создают коллекции только для чтения. Через их интерфейсы их нельзя изменять. Используйте + для создания новых коллекций, а emptyList()/emptySet()/emptyMap() — для типизированных пустых коллекций.
Часто задаваемые вопросы
Урок «listOf, setOf, mapOf: доступные только для чтения коллекции» бесплатный?
Да — полный текст урока «listOf, setOf, mapOf: доступные только для чтения коллекции» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Kotlin Academy, подпишись на CoddyKit PRO. Курс Kotlin Academy содержит 4 уроков всего.
Чему я научусь в уроке «listOf, setOf, mapOf: доступные только для чтения коллекции»?
Создавайте неизменяемые коллекции и разбирайтесь в способах доступа к ним. Ты практикуешь Kotlin Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Kotlin Academy?
Предыдущий опыт не требуется. Kotlin Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 1 из 4.
Сколько времени занимает урок «listOf, setOf, mapOf: доступные только для чтения коллекции»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Kotlin Academy?
Да. Каждый урок Kotlin Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- listOf, setOf, mapOf: доступные только для чтения коллекции
- mutableListOf, mutableMapOf: изменяемые построители
- Доступ к элементам: get, first, last, getOrNull
- Перебор и преобразование коллекций со стандартной библиотекой