Коллекции
При программировании полезно группировать данные в структуры для последующей обработки. Именно для этого в Kotlin предусмотрены коллекции.
В Kotlin есть следующие коллекции для группировки элементов:
Тип коллекции |
Описание |
|---|---|
Списки |
Упорядоченные коллекции элементов |
Множества |
Неупорядоченные коллекции уникальных элементов |
Отображения |
Наборы пар «ключ — значение», где ключи уникальны и каждому ключу соответствует только одно значение |
Каждый тип коллекции может быть изменяемым или доступным только для чтения.
Список
Списки хранят элементы в порядке их добавления и допускают наличие повторяющихся элементов.
Чтобы создать список только для чтения (List), используйте функцию listOf().
Чтобы создать изменяемый список (MutableList), используйте функцию mutableListOf().
При создании списков Kotlin может вывести тип хранящихся в них элементов. Чтобы явно указать тип, добавьте его в угловых скобках <> после объявления списка:
fun main() {
//sampleStart
// Read only list
val readOnlyShapes = listOf("triangle", "square", "circle")
println(readOnlyShapes)
// [triangle, square, circle]
// Mutable list with explicit type declaration
val shapes: MutableList<String> = mutableListOf("triangle", "square", "circle")
println(shapes)
// [triangle, square, circle]
//sampleEnd
}
Списки упорядочены, поэтому для доступа к элементу списка используйте оператор индексированного доступа []:
fun main() {
//sampleStart
val readOnlyShapes = listOf("triangle", "square", "circle")
println("The first item in the list is: ${readOnlyShapes[0]}")
// The first item in the list is: triangle
//sampleEnd
}
Чтобы получить первый или последний элемент списка, используйте соответственно функции .first() и .last():
fun main() {
//sampleStart
val readOnlyShapes = listOf("triangle", "square", "circle")
println("The first item in the list is: ${readOnlyShapes.first()}")
// The first item in the list is: triangle
//sampleEnd
}
Чтобы получить количество элементов в списке, используйте функцию .count():
fun main() {
//sampleStart
val readOnlyShapes = listOf("triangle", "square", "circle")
println("This list has ${readOnlyShapes.count()} items")
// This list has 3 items
//sampleEnd
}
Чтобы проверить, содержится ли элемент в списке, используйте оператор in:
fun main() {
//sampleStart
val readOnlyShapes = listOf("triangle", "square", "circle")
println("circle" in readOnlyShapes)
// true
//sampleEnd
}
Чтобы добавлять элементы в изменяемый список или удалять их из него, используйте соответственно функции .add() и .remove():
fun main() {
//sampleStart
val shapes: MutableList<String> = mutableListOf("triangle", "square", "circle")
// Add "pentagon" to the list
shapes.add("pentagon")
println(shapes)
// [triangle, square, circle, pentagon]
// Remove the first "pentagon" from the list
shapes.remove("pentagon")
println(shapes)
// [triangle, square, circle]
//sampleEnd
}
Множество
В отличие от списков, которые упорядочены и допускают повторяющиеся элементы, множества являются неупорядоченными и содержат только уникальные элементы.
Чтобы создать множество только для чтения (Set), используйте функцию setOf().
Чтобы создать изменяемое множество (MutableSet), используйте функцию mutableSetOf().
При создании множеств Kotlin может вывести тип хранящихся в них элементов. Чтобы явно указать тип, добавьте его в угловых скобках <> после объявления множества:
fun main() {
//sampleStart
// Read-only set
val readOnlyFruit = setOf("apple", "banana", "cherry", "cherry")
// Mutable set with explicit type declaration
val fruit: MutableSet<String> = mutableSetOf("apple", "banana", "cherry", "cherry")
println(readOnlyFruit)
// [apple, banana, cherry]
//sampleEnd
}
В предыдущем примере видно, что повторяющийся элемент "cherry" был отброшен, поскольку множества содержат только уникальные элементы.
Чтобы получить количество элементов во множестве, используйте функцию .count():
fun main() {
//sampleStart
val readOnlyFruit = setOf("apple", "banana", "cherry", "cherry")
println("This set has ${readOnlyFruit.count()} items")
// This set has 3 items
//sampleEnd
}
Чтобы проверить, содержится ли элемент во множестве, используйте оператор in:
fun main() {
//sampleStart
val readOnlyFruit = setOf("apple", "banana", "cherry", "cherry")
println("banana" in readOnlyFruit)
// true
//sampleEnd
}
Чтобы добавлять элементы в изменяемое множество или удалять их из него, используйте соответственно функции .add() и .remove():
fun main() {
//sampleStart
val fruit: MutableSet<String> = mutableSetOf("apple", "banana", "cherry", "cherry")
fruit.add("dragonfruit") // Add "dragonfruit" to the set
println(fruit) // [apple, banana, cherry, dragonfruit]
fruit.remove("dragonfruit") // Remove "dragonfruit" from the set
println(fruit) // [apple, banana, cherry]
//sampleEnd
}
Отображение
Отображения хранят элементы в виде пар «ключ — значение». Получить значение можно, указав ключ. Можно представить отображение в виде меню ресторана. Чтобы узнать цену (значение), нужно найти блюдо (ключ), которое вы хотите заказать. Отображения полезны, если нужно найти значение без использования числового индекса, как в списке.
Чтобы создать отображение только для чтения (Map), используйте функцию mapOf().
Чтобы создать изменяемое отображение (MutableMap), используйте функцию mutableMapOf().
При создании отображений Kotlin может вывести тип хранящихся в них элементов. Чтобы явно указать типы, добавьте типы ключей и значений в угловых скобках <> после объявления отображения. Например: MutableMap<String, Int>. Тип ключей — String, а тип значений — Int.
Самый простой способ создать отображение — использовать to между каждым ключом и соответствующим ему значением:
fun main() {
//sampleStart
// Read-only map
val readOnlyJuiceMenu = mapOf("apple" to 100, "kiwi" to 190, "orange" to 100)
println(readOnlyJuiceMenu)
// {apple=100, kiwi=190, orange=100}
// Mutable map with explicit type declaration
val juiceMenu: MutableMap<String, Int> = mutableMapOf("apple" to 100, "kiwi" to 190, "orange" to 100)
println(juiceMenu)
// {apple=100, kiwi=190, orange=100}
//sampleEnd
}
Чтобы получить значение из отображения, используйте оператор индексированного доступа [] с соответствующим ключом:
fun main() {
//sampleStart
// Read-only map
val readOnlyJuiceMenu = mapOf("apple" to 100, "kiwi" to 190, "orange" to 100)
println("The value of apple juice is: ${readOnlyJuiceMenu["apple"]}")
// The value of apple juice is: 100
//sampleEnd
}
Также можно использовать оператор индексированного доступа [] для добавления элементов в изменяемое отображение:
fun main() {
//sampleStart
val juiceMenu: MutableMap<String, Int> = mutableMapOf("apple" to 100, "kiwi" to 190, "orange" to 100)
juiceMenu["coconut"] = 150 // Add key "coconut" with value 150 to the map
println(juiceMenu)
// {apple=100, kiwi=190, orange=100, coconut=150}
//sampleEnd
}
Чтобы удалить элементы из изменяемого отображения, используйте функцию .remove():
fun main() {
//sampleStart
val juiceMenu: MutableMap<String, Int> = mutableMapOf("apple" to 100, "kiwi" to 190, "orange" to 100)
juiceMenu.remove("orange") // Remove key "orange" from the map
println(juiceMenu)
// {apple=100, kiwi=190}
//sampleEnd
}
Чтобы получить количество элементов в отображении, используйте функцию .count():
fun main() {
//sampleStart
// Read-only map
val readOnlyJuiceMenu = mapOf("apple" to 100, "kiwi" to 190, "orange" to 100)
println("This map has ${readOnlyJuiceMenu.count()} key-value pairs")
// This map has 3 key-value pairs
//sampleEnd
}
Чтобы проверить, содержится ли определённый ключ в отображении, используйте функцию .containsKey():
fun main() {
//sampleStart
val readOnlyJuiceMenu = mapOf("apple" to 100, "kiwi" to 190, "orange" to 100)
println(readOnlyJuiceMenu.containsKey("kiwi"))
// true
//sampleEnd
}
Чтобы получить коллекцию ключей или значений отображения, используйте соответственно свойства keys и values:
fun main() {
//sampleStart
val readOnlyJuiceMenu = mapOf("apple" to 100, "kiwi" to 190, "orange" to 100)
println(readOnlyJuiceMenu.keys)
// [apple, kiwi, orange]
println(readOnlyJuiceMenu.values)
// [100, 190, 100]
//sampleEnd
}
Чтобы проверить, содержится ли ключ или значение в отображении, используйте оператор in:
fun main() {
//sampleStart
val readOnlyJuiceMenu = mapOf("apple" to 100, "kiwi" to 190, "orange" to 100)
println("orange" in readOnlyJuiceMenu.keys)
// true
// Alternatively, you don't need to use the keys property
println("orange" in readOnlyJuiceMenu)
// true
println(200 in readOnlyJuiceMenu.values)
// false
//sampleEnd
}
Дополнительную информацию о возможностях коллекций см. в разделе Коллекции.
Теперь, когда вы знаете основные типы и умеете работать с коллекциями, пришло время изучить поток управления, который можно использовать в программах.
Практика
Упражнение 1
У вас есть список «зелёных» чисел и список «красных» чисел. Дополните код, чтобы вывести общее количество чисел.
fun main() {
val greenNumbers = listOf(1, 4, 23)
val redNumbers = listOf(17, 2)
// Write your code here
}
Упражнение 2
У вас есть набор протоколов, поддерживаемых сервером. Пользователь запрашивает использование определённого протокола. Дополните программу, чтобы проверить, поддерживается ли запрошенный протокол (isSupported должно быть логическим значением).
fun main() {
val SUPPORTED = setOf("HTTP", "HTTPS", "FTP")
val requested = "smtp"
val isSupported = // Write your code here
println("Support for $requested: $isSupported")
}
- Подсказка
Проверьте запрошенный протокол в верхнем регистре. Для этого можно использовать функцию
.uppercase().
Упражнение 3
Создайте отображение, связывающее целые числа от 1 до 3 с их написанием словами. Используйте это отображение, чтобы написать заданное число словами.
fun main() {
val number2word = // Write your code here
val n = 2
println("$n is spelled as '${<Write your code here >}'")
}
© 2010–2026 JetBrains s.r.o. and Kotlin Programming Language contributors
Licensed under the Apache License, Version 2.0.
https://kotlinlang.org/docs/kotlin-tour-collections.html