0Pricing
Kotlin Academy · Урок

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 — локальная установка не требуется.

Все уроки этого курса

  1. listOf, setOf, mapOf: доступные только для чтения коллекции
  2. mutableListOf, mutableMapOf: изменяемые построители
  3. Доступ к элементам: get, first, last, getOrNull
  4. Перебор и преобразование коллекций со стандартной библиотекой
← Назад к Kotlin Academy