Вікіпідручник
ukwikibooks
https://uk.wikibooks.org/wiki/%D0%93%D0%BE%D0%BB%D0%BE%D0%B2%D0%BD%D0%B0_%D1%81%D1%82%D0%BE%D1%80%D1%96%D0%BD%D0%BA%D0%B0
MediaWiki 1.47.0-wmf.10
first-letter
Медіа
Спеціальна
Обговорення
Користувач
Обговорення користувача
Вікіпідручник
Обговорення Вікіпідручника
Файл
Обговорення файлу
MediaWiki
Обговорення MediaWiki
Шаблон
Обговорення шаблону
Довідка
Обговорення довідки
Категорія
Обговорення категорії
Полиця
Обговорення полиці
Рецепт
Обговорення рецепта
Субтитри
Обговорення субтитрів
Модуль
Обговорення модуля
Подія
Обговорення події
Освоюємо Kotlin/Колекції
0
8367
41332
39660
2026-07-13T16:56:01Z
Володимир Груша
985
/* List */
41332
wikitext
text/x-wiki
{{Nav|Освоюємо Kotlin|Колекції|programming|nocat=1}}
'''Колекції''' - це набір класів для роботи з даними. Колекції в Kotlin представлені типами List, Set, Map, MutableMap, MutableList, MutableMap та ArrayDeque. Приставка Mutable означає, що колекцію можна змінювати. Прості List, Set та Map - не змінюються. Вміст ArrayDeque також можна змінювати. Робота з колекціями схожа на роботу з масивами.
==List==
List - це список елементів одного типу, які можуть повторюватись.
<syntaxhighlight lang="kotlin" line start="1">
val numbers = listOf("one", "two", "three", "four") //список String
val numbers2 = listOf<String>("one", "two", "three", "four") // можна явно вказати тип елементів списку
println("Number of elements: ${numbers.size}")
println("Third element: ${numbers.get(2)}") // можна так звертатись до елементу списку
println("Fourth element: ${numbers[3]}") //а можна як до масив
println("Index of element \"two\" ${numbers.indexOf("two")}")
</syntaxhighlight>
{{XConsole|1='''Результат:'''
<pre>
Number of elements: 4
Third element: three
Fourth element: four
Index of element "two" 1
</pre>}}
В mutable колекціях ми можемо видаляти елементи, замінювати їх та додавати нові:
<syntaxhighlight lang="kotlin" line start="1">
val numbers2 = mutableListOf<String>("one", "two", "three", "four")
numbers2.removeAt(1) // видаляємо перший(насправді другий) елемент списку
numbers2[0] ="first" //заміняєм нульовий елемент
numbers2.set(2, "third") // заміняєм другий елемент списку
numbers2.add("fives") // додаємо новий елемент
println(numbers2) // [first, three, third, five]
</syntaxhighlight>
Якщо необхідно на базі List створити новий MutableList, то можна скористатись відповідною функціїю toMutableList():
<syntaxhighlight lang="kotlin" line start="1" highlight=2>
val list: List<Int> = listOf(5, 4, 3, 56)
val mutableList=list.toMutableList()
mutableList.add(90)
println(mutableList) // [5, 4, 3, 56, 90]
mutableList.remove(4 )// можна видалити елемент
println(mutableList) // [5, 3, 56, 90]
</syntaxhighlight>
==Set==
Set - це множина елементів, які не повторюються. Порядок елементів не визначений. null також може бути елементом множини, але лише один раз. Дві колекції Set рівні, якщо вони однакових розмірів і у них ідентичні елементи.
<syntaxhighlight lang="kotlin" line start="1">
val numbers = setOf(1, 2, 3, 4)
println("Кількість елементів: ${numbers.size}")
if (numbers.contains(1)) println("1 є у множині")
val numbersBackwards = setOf(4, 3, 2, 1)
println("Множини рівні: ${numbers == numbersBackwards}")
</syntaxhighlight>
{{XConsole|1='''Результат:'''
<pre>
Кількість елементів: 4
1 є у множині
Множини рівні: true
</pre>}}
MutableSet підтриує операції з класу MutableCollection.
Реалізація MutableSet за замовчуванням зберігає порядок елементів. Тож функції, що покладаються на порядок елементів як то first() чи last(), повертають передбачуваний результат (перше або останнє значення).
{{XNote|При використанні, в якості елементів Set, класів даних (data class), вміст об'єктів буде порівнюватись автоматично і, якщо будуть об'єкти з однаковими властивостями, то включатись в Set буде лише один з цих об'єктів.}}
==Map==
Map та MutableMap хоч не є нащадками інтерфейсу Collection, відноситься також до колекцій. Map зберігає значення у вигляді пари ключ-значення. Два об'єкта Map рівні, якщо в них однакові пари, незалежно від їхнього місця в середині Map.
<syntaxhighlight lang="kotlin" line start="1">
val numbersMap = mutableMapOf("one" to 1, "two" to 2)
numbersMap.put("three", 3) // можна так
numbersMap["one"] = 11 // а можна так з квадратними дужками
println(numbersMap) // {one=11, two=2, three=3}
println("Всі ключі: ${numbersMap.keys}")
println("Всі значення: ${numbersMap.values}")
if ("one" in numbersMap) println("значення ключа \"one\": ${numbersMap["one"]}")
if (11 in numbersMap.values) println("Значення 11 є у map")
if (numbersMap.containsValue(11)) println("Значення 11 є у map") // те ж саме
</syntaxhighlight>
{{XConsole|1='''Результат:'''
<pre>
{one=11, two=2, three=3}
Всі ключі: [one, two, three]
Всі значення: [11, 2, 3]
значення ключа "one": 11
Значення 11 є у map
Значення 11 є у map
</pre>}}
В колекціях і, зокрема, в Map не обов'язково можуть бути базові типи. Колекція може містити і інші об'єкти створені програмістом. Наприклад, створимо клас машина (Car), який міститиме марку машини, її колір та ціну. Map міститиме певний порядковий номер машини зіставлений з об'єктом Car.
<syntaxhighlight lang="kotlin" line start="1">
class Car (val name:String, val color:String, val price:Double){
/**
* повертаємо інформацію про назву, колір і ціну машини
*/
fun getInformation():String = "$name $color $price"
}
fun main(){
var car1= Car("Honda", "blue", 11000.0)
var car2= Car("BMW", "red", 12345.0)
var car3= Car("Mersedes", "white", 11550.0)
val carMap = mapOf(1 to car1, 2 to car2, 3 to car3)
println("Перша машина: "+carMap[1]?.getInformation())
}
</syntaxhighlight>
{{XConsole|1='''Результат:'''
<pre>
Перша машина: Honda blue 11000.0
</pre>}}
Якщо потрібно пройтись почергово по елементах Map, то можна використати цикл або forEach:
<syntaxhighlight lang="kotlin" line start="1">
fun main(){
var propertiesMap=mutableMapOf<String, Boolean>()
propertiesMap["Big"]=true
propertiesMap["Printable"]=false
propertiesMap["Readable"]=true
println("Перший спосіб:")
for (prop in propertiesMap.entries.iterator()){
println("Key: ${prop.key}, Value: ${prop.value}")
}
println("Другий спосіб:")
propertiesMap.forEach{prop->
println("Key: ${prop.key}, Value: ${prop.value}")
}
}
</syntaxhighlight>
{{XConsole|1='''Результат:'''
<pre>
Перший спосіб:
Key: Big, Value: true
Key: Printable, Value: false
Key: Readable, Value: true
Другий спосіб:
Key: Big, Value: true
Key: Printable, Value: false
Key: Readable, Value: true
</pre>}}
==ArrayDeque==
ArrayDeque - це реалізація двохсторонньої черги. Тобто в дану колекцію дані можна додавати як на перед черги так і в кінець.
<syntaxhighlight lang="kotlin" line start="1">
val deque = ArrayDeque(listOf(1, 2, 3, 4, 5))
deque.addFirst(0)
deque.addLast(6)
println(deque) // [0, 1, 2, 3, 4, 5, 6]
println(deque.first()) // 0
println(deque.last()) // 6
deque.removeFirst()
deque.removeLast()
println(deque) // [1, 2, 3, 4, 5]
</syntaxhighlight>
==Функції для роботи з колекціями==
Стандартна бібліотека Kotlin надає ряд функцій, спеціально створених для роботи з колекціями. Розглянемо деякі з них.
===Функція map===
Функція map() дозволяє трансформувати оригінальну колекцію у нову. При цьому ця лямбда функція проходить по елементах колекції і для кожного елемента повертає результат цієї лямбда функції. В результаті створюється новий список з отриманих значень:
Як приклад розглянемо збільшення кожного елементу списку на 5 та на 10.
<syntaxhighlight lang="kotlin" line start="1">
fun main(){
val numberList=listOf(1,2,3,4,5)
//перший спосіб (збільшуєм у 5 раз)
val numberList1=numberList.map{it*5}
println(numberList1) // [5, 10, 15, 20, 25]
//другий спосіб (збільшуєм у 10 раз)
val numberList2=numberList.map{number->//замість it використовуємо назву
val myNum=number*10
myNum // останній рядок є присвоюваним значенням
}
println(numberList2) // [10, 20, 30, 40, 50]
}
</syntaxhighlight>
Функцію можна застосовувати до всіх видів колекцій, включаючи Map. Детальніше [https://kotlinlang.org/docs/collection-transformations.html тут].
===Сортування колекцій===
Для сортування колекцій як то списки існують функції, що починаються зі слова sort:
<syntaxhighlight lang="kotlin" line start="1">
val numberList=listOf(1,4,3,4,2)
val sortedList=numberList.sorted() //1 2 3 4 4
val sortedList2=numberList.sortedDescending() //4 4 3 2 1
</syntaxhighlight>
Об'єкти можна посортувати за значенням поля:
<syntaxhighlight lang="kotlin" line start="1">
data class Car(val name:String, val price:Int)
fun main(){
val carList=listOf(
Car("Toyota", 500),
Car("BMW", 565),
Car("Nissan", 456),
Car("Honda", 800)
)
val sortedCarList=carList.sortedBy { it.price } //вказуємо поле для сортування
println(sortedCarList)
}
</syntaxhighlight>
{{XConsole|1='''Результат:'''
<pre>
[Car(name=Nissan, price=456), Car(name=Toyota, price=500), Car(name=BMW, price=565), Car(name=Honda, price=800)]
</pre>}}
===Фільтрування колекцій===
Ми можемо відфільтруваати вміст колекції за певною умовою використовуючи функцію filter():
<syntaxhighlight lang="kotlin" line start="1">
data class Car(val name:String, val price:Int)
fun main(){
val carList=listOf(
Car("Toyota", 500),
Car("BMW", 565),
Car("Nissan", 456),
Car("Honda", 800)
)
val newCarList=carList.filter{it.price>500}
println(newCarList)
}
</syntaxhighlight>
{{XConsole|1='''Результат:'''
<pre>
[Car(name=BMW, price=565), Car(name=Honda, price=800)]
</pre>}}
Детальніше читайте [https://kotlinlang.org/docs/collection-filtering.html тут]
===Пошук в колекціях===
Можна здійснити пошук в колекціях за допомогою функції find():
<syntaxhighlight lang="kotlin" line start="1">
val newCarList=carList.find{it.price==500}
</syntaxhighlight>
В результаті видасть перший елемент, що співпав з умовою. Якщо необхідно здійснити пошуку з кінця, то використовуємо функцію findLast()
===forEach===
Можна пройтися по всіх елементах колекції з використанням функції forEach:
<syntaxhighlight lang="kotlin" line start="1">
carList.forEach{println(it)}
</syntaxhighlight>
===Поєднання функцій===
Роботу із вмістом колекцій можна проводити поєднуючи функції ланцюжком, використовуючи оператор <code>.</code>(точку):
<syntaxhighlight lang="kotlin" line start="1">
val newList=carList.filter { it.price>500 }.sortedBy{it.price}
</syntaxhighlight>
[[Категорія:Освоюємо Kotlin]]
{{Nav}}
sbohymefs1qssozk1yv5nabbxdus2u7
41333
41332
2026-07-13T16:56:30Z
Володимир Груша
985
/* List */
41333
wikitext
text/x-wiki
{{Nav|Освоюємо Kotlin|Колекції|programming|nocat=1}}
'''Колекції''' - це набір класів для роботи з даними. Колекції в Kotlin представлені типами List, Set, Map, MutableMap, MutableList, MutableMap та ArrayDeque. Приставка Mutable означає, що колекцію можна змінювати. Прості List, Set та Map - не змінюються. Вміст ArrayDeque також можна змінювати. Робота з колекціями схожа на роботу з масивами.
==List==
List - це список елементів одного типу, які можуть повторюватись.
<syntaxhighlight lang="kotlin" line start="1">
val numbers = listOf("one", "two", "three", "four") //список String
val numbers2 = listOf<String>("one", "two", "three", "four") // можна явно вказати тип елементів списку
println("Number of elements: ${numbers.size}")
println("Third element: ${numbers.get(2)}") // можна так звертатись до елементу списку
println("Fourth element: ${numbers[3]}") //а можна як до масив
println("Index of element \"two\" ${numbers.indexOf("two")}")
</syntaxhighlight>
{{XConsole|1='''Результат:'''
<pre>
Number of elements: 4
Third element: three
Fourth element: four
Index of element "two" 1
</pre>}}
В mutable колекціях ми можемо видаляти елементи, замінювати їх та додавати нові:
<syntaxhighlight lang="kotlin" line start="1">
val numbers2 = mutableListOf<String>("one", "two", "three", "four")
numbers2.removeAt(1) // видаляємо перший(насправді другий) елемент списку
numbers2[0] ="first" //заміняєм нульовий елемент
numbers2.set(2, "third") // заміняєм другий елемент списку
numbers2.add("fives") // додаємо новий елемент
println(numbers2) // [first, three, third, five]
</syntaxhighlight>
Якщо необхідно на базі List створити новий MutableList, то можна скористатись відповідною функціїю toMutableList():
<syntaxhighlight lang="kotlin" line start="1" highlight=2>
val list: List<Int> = listOf(5, 4, 3, 56)
val mutableList=list.toMutableList()
mutableList.add(90)
println(mutableList) // [5, 4, 3, 56, 90]
mutableList.remove(4)// можна видалити елемент
println(mutableList) // [5, 3, 56, 90]
</syntaxhighlight>
==Set==
Set - це множина елементів, які не повторюються. Порядок елементів не визначений. null також може бути елементом множини, але лише один раз. Дві колекції Set рівні, якщо вони однакових розмірів і у них ідентичні елементи.
<syntaxhighlight lang="kotlin" line start="1">
val numbers = setOf(1, 2, 3, 4)
println("Кількість елементів: ${numbers.size}")
if (numbers.contains(1)) println("1 є у множині")
val numbersBackwards = setOf(4, 3, 2, 1)
println("Множини рівні: ${numbers == numbersBackwards}")
</syntaxhighlight>
{{XConsole|1='''Результат:'''
<pre>
Кількість елементів: 4
1 є у множині
Множини рівні: true
</pre>}}
MutableSet підтриує операції з класу MutableCollection.
Реалізація MutableSet за замовчуванням зберігає порядок елементів. Тож функції, що покладаються на порядок елементів як то first() чи last(), повертають передбачуваний результат (перше або останнє значення).
{{XNote|При використанні, в якості елементів Set, класів даних (data class), вміст об'єктів буде порівнюватись автоматично і, якщо будуть об'єкти з однаковими властивостями, то включатись в Set буде лише один з цих об'єктів.}}
==Map==
Map та MutableMap хоч не є нащадками інтерфейсу Collection, відноситься також до колекцій. Map зберігає значення у вигляді пари ключ-значення. Два об'єкта Map рівні, якщо в них однакові пари, незалежно від їхнього місця в середині Map.
<syntaxhighlight lang="kotlin" line start="1">
val numbersMap = mutableMapOf("one" to 1, "two" to 2)
numbersMap.put("three", 3) // можна так
numbersMap["one"] = 11 // а можна так з квадратними дужками
println(numbersMap) // {one=11, two=2, three=3}
println("Всі ключі: ${numbersMap.keys}")
println("Всі значення: ${numbersMap.values}")
if ("one" in numbersMap) println("значення ключа \"one\": ${numbersMap["one"]}")
if (11 in numbersMap.values) println("Значення 11 є у map")
if (numbersMap.containsValue(11)) println("Значення 11 є у map") // те ж саме
</syntaxhighlight>
{{XConsole|1='''Результат:'''
<pre>
{one=11, two=2, three=3}
Всі ключі: [one, two, three]
Всі значення: [11, 2, 3]
значення ключа "one": 11
Значення 11 є у map
Значення 11 є у map
</pre>}}
В колекціях і, зокрема, в Map не обов'язково можуть бути базові типи. Колекція може містити і інші об'єкти створені програмістом. Наприклад, створимо клас машина (Car), який міститиме марку машини, її колір та ціну. Map міститиме певний порядковий номер машини зіставлений з об'єктом Car.
<syntaxhighlight lang="kotlin" line start="1">
class Car (val name:String, val color:String, val price:Double){
/**
* повертаємо інформацію про назву, колір і ціну машини
*/
fun getInformation():String = "$name $color $price"
}
fun main(){
var car1= Car("Honda", "blue", 11000.0)
var car2= Car("BMW", "red", 12345.0)
var car3= Car("Mersedes", "white", 11550.0)
val carMap = mapOf(1 to car1, 2 to car2, 3 to car3)
println("Перша машина: "+carMap[1]?.getInformation())
}
</syntaxhighlight>
{{XConsole|1='''Результат:'''
<pre>
Перша машина: Honda blue 11000.0
</pre>}}
Якщо потрібно пройтись почергово по елементах Map, то можна використати цикл або forEach:
<syntaxhighlight lang="kotlin" line start="1">
fun main(){
var propertiesMap=mutableMapOf<String, Boolean>()
propertiesMap["Big"]=true
propertiesMap["Printable"]=false
propertiesMap["Readable"]=true
println("Перший спосіб:")
for (prop in propertiesMap.entries.iterator()){
println("Key: ${prop.key}, Value: ${prop.value}")
}
println("Другий спосіб:")
propertiesMap.forEach{prop->
println("Key: ${prop.key}, Value: ${prop.value}")
}
}
</syntaxhighlight>
{{XConsole|1='''Результат:'''
<pre>
Перший спосіб:
Key: Big, Value: true
Key: Printable, Value: false
Key: Readable, Value: true
Другий спосіб:
Key: Big, Value: true
Key: Printable, Value: false
Key: Readable, Value: true
</pre>}}
==ArrayDeque==
ArrayDeque - це реалізація двохсторонньої черги. Тобто в дану колекцію дані можна додавати як на перед черги так і в кінець.
<syntaxhighlight lang="kotlin" line start="1">
val deque = ArrayDeque(listOf(1, 2, 3, 4, 5))
deque.addFirst(0)
deque.addLast(6)
println(deque) // [0, 1, 2, 3, 4, 5, 6]
println(deque.first()) // 0
println(deque.last()) // 6
deque.removeFirst()
deque.removeLast()
println(deque) // [1, 2, 3, 4, 5]
</syntaxhighlight>
==Функції для роботи з колекціями==
Стандартна бібліотека Kotlin надає ряд функцій, спеціально створених для роботи з колекціями. Розглянемо деякі з них.
===Функція map===
Функція map() дозволяє трансформувати оригінальну колекцію у нову. При цьому ця лямбда функція проходить по елементах колекції і для кожного елемента повертає результат цієї лямбда функції. В результаті створюється новий список з отриманих значень:
Як приклад розглянемо збільшення кожного елементу списку на 5 та на 10.
<syntaxhighlight lang="kotlin" line start="1">
fun main(){
val numberList=listOf(1,2,3,4,5)
//перший спосіб (збільшуєм у 5 раз)
val numberList1=numberList.map{it*5}
println(numberList1) // [5, 10, 15, 20, 25]
//другий спосіб (збільшуєм у 10 раз)
val numberList2=numberList.map{number->//замість it використовуємо назву
val myNum=number*10
myNum // останній рядок є присвоюваним значенням
}
println(numberList2) // [10, 20, 30, 40, 50]
}
</syntaxhighlight>
Функцію можна застосовувати до всіх видів колекцій, включаючи Map. Детальніше [https://kotlinlang.org/docs/collection-transformations.html тут].
===Сортування колекцій===
Для сортування колекцій як то списки існують функції, що починаються зі слова sort:
<syntaxhighlight lang="kotlin" line start="1">
val numberList=listOf(1,4,3,4,2)
val sortedList=numberList.sorted() //1 2 3 4 4
val sortedList2=numberList.sortedDescending() //4 4 3 2 1
</syntaxhighlight>
Об'єкти можна посортувати за значенням поля:
<syntaxhighlight lang="kotlin" line start="1">
data class Car(val name:String, val price:Int)
fun main(){
val carList=listOf(
Car("Toyota", 500),
Car("BMW", 565),
Car("Nissan", 456),
Car("Honda", 800)
)
val sortedCarList=carList.sortedBy { it.price } //вказуємо поле для сортування
println(sortedCarList)
}
</syntaxhighlight>
{{XConsole|1='''Результат:'''
<pre>
[Car(name=Nissan, price=456), Car(name=Toyota, price=500), Car(name=BMW, price=565), Car(name=Honda, price=800)]
</pre>}}
===Фільтрування колекцій===
Ми можемо відфільтруваати вміст колекції за певною умовою використовуючи функцію filter():
<syntaxhighlight lang="kotlin" line start="1">
data class Car(val name:String, val price:Int)
fun main(){
val carList=listOf(
Car("Toyota", 500),
Car("BMW", 565),
Car("Nissan", 456),
Car("Honda", 800)
)
val newCarList=carList.filter{it.price>500}
println(newCarList)
}
</syntaxhighlight>
{{XConsole|1='''Результат:'''
<pre>
[Car(name=BMW, price=565), Car(name=Honda, price=800)]
</pre>}}
Детальніше читайте [https://kotlinlang.org/docs/collection-filtering.html тут]
===Пошук в колекціях===
Можна здійснити пошук в колекціях за допомогою функції find():
<syntaxhighlight lang="kotlin" line start="1">
val newCarList=carList.find{it.price==500}
</syntaxhighlight>
В результаті видасть перший елемент, що співпав з умовою. Якщо необхідно здійснити пошуку з кінця, то використовуємо функцію findLast()
===forEach===
Можна пройтися по всіх елементах колекції з використанням функції forEach:
<syntaxhighlight lang="kotlin" line start="1">
carList.forEach{println(it)}
</syntaxhighlight>
===Поєднання функцій===
Роботу із вмістом колекцій можна проводити поєднуючи функції ланцюжком, використовуючи оператор <code>.</code>(точку):
<syntaxhighlight lang="kotlin" line start="1">
val newList=carList.filter { it.price>500 }.sortedBy{it.price}
</syntaxhighlight>
[[Категорія:Освоюємо Kotlin]]
{{Nav}}
oo6smidyr2c9k0ccx34hxd8w03u8ll9
Обговорення:Множина Мандельброта
1
8642
41334
2026-07-14T10:04:47Z
Aokoroko
9149
/* O! */ нова тема
41334
wikitext
text/x-wiki
== O! ==
O! [[Користувач:Aokoroko|Aokoroko]] ([[Обговорення користувача:Aokoroko|обговорення]]) 10:04, 14 липня 2026 (UTC)
ppo952hzs12zef8qzviw3mlm2oay3od
Обговорення користувача:Aokoroko
3
8643
41335
2026-07-14T10:05:21Z
Aokoroko
9149
Створена сторінка: *
41335
wikitext
text/x-wiki
*
q37hcqzkhu1rsia7lbtbi2g7lh7y9gh