Списки в Kotlin
Под списками в программировании понимают составной тип данных, элементы которого упорядочены как в случае массивов. Однако списки могут содержать элементы разных типов, количество элементов в них можно менять, то есть удалять и добавлять.
Списки являются разновидностью коллекций – особой группы типов данных, или классов. Коллекции разных типов имеют во многом похожие функции-методы. Разные коллекции можно передавать в одни и те же функции. Коллекции связаны между собой наследованием и общими интерфейсами.
С другой стороны, в Kotlin списки (как и другие типы коллекций) делятся на неизменяемые и изменяемые. В неизменяемых нельзя менять количество элементов и изменять значение элементов. Это сделано с целью защиты данных. Если программист не планирует изменение списка при последующей разработке программы или ее выполнении, то, делая список неизменяемым, он его защищает от случайных изменений. Ведь val
по отношению к списку не делает его неизменяемым. Как и в случае массивов val-список можно менять, нельзя только присвоить переменной другой список.
В Kotlin неизменяемый список обычно создается вызовом функции listOf()
, которой передается список элементов. Также можно использовать конструктор класса List
(по аналогии с массивами).
fun main() { val a = listOf("one", "two", 3) val b = listOf(1.2, 4.5, 3.2, 1.8) val c: List<Double> c = b + listOf(4.3, 2.5) println(a) println(b) println(c) }
Переменные неизменяемых списков имеют типы List<Any>
, List<Double>
и т. д. Any
(любой) – значит, что список имеет элементы разного типа. На самом деле такие списки используются редко.
Получить отдельный элемент из списка можно по индексу, также как в случае с массивами. Например, выражение println(b[0])
выведет на экран первый элемент списка b.
Попытка присвоить новое значение какому-нибудь элементу неизменяемого списка вернет ошибку. Например, если b – это переменная типа List<Double>
, то выражение b[0] = 1.1
недопустимо.
Другое дело – изменяемые списки. Такие списки в Kotlin относятся к типу MutableList
. Слово "mutable" переводится как изменяемый.
fun main() { val b = mutableListOf(1.2, 4.5, 3.2, 1.8) println(b[0]) b[0] = 10.0 println(b[0]) for (i in b.indices) { b[i] += 0.3 } println(b) }
Выражение b.indices
возвращает диапазон от 0 до индекса последнего элемента массива. Так в примере выше это будет диапазон 0..3.
Особенностью изменяемых списков является не только изменение значений элементов. Это можно делать и с массивами. В списки можно добавлять элементы, удалять их оттуда. Для этого используются специальные методы.
В Kotlin с помощью различных вариаций методов add()
и addAll()
в список добавляется элемент или другой список.
fun main() { val b = mutableListOf(1.2, 4.5, 3.2, 1.8) println(b.size) b.add(10.0) b.add(0, 12.5) b.addAll(b.size / 2, listOf(-3.4, -8.9) ) println(b.size) for (i in b) { print("$i ") } }
Если в функцию add()
передается только один аргумент, то он расценивается как значение и добавляется в конец списка. Если передается два аргумента, то первый считается индексом, а второй – значением, которое надо вставить в указанное место списка.
Для удаления элементов из списка используются методы removeAt()
, который удаляет элемент по индексу, и remove()
, удаляющий из списка указанное значение, а также ряд других.
fun main() { val b = mutableListOf(1.2, 4.5, 3.2, 1.8, 3.2) b.removeAt(0) b.remove(3.2) println(b) // вывод: [4.5, 1.8, 3.2] }
Если в списке есть повторы значения, то remove()
удаляет только одно из них.
Практическая работа:
-
Заполните список числами. Выведите на экран. Примените к списку функцию-метод
shuffle()
. Снова выведите список на экран. Что делает методshuffle()
? -
Заполните список случайными числами, отсортируйте его с помощью метода
sort()
, удалите из списка минимальное и максимальное значения.
PDF-версия курса с ответами к практическим работам