3. Узнайте больше о коллекциях

В этом задании вы узнаете больше о коллекциях, включая списки, и о новом типе коллекций.HashMap

Шаг 1: Узнайте больше о списках

  1. Списки и изменяемые списки были рассмотрены в предыдущем уроке. Это очень распространенные структуры данных, поэтому Kotlin предоставляет для них ряд встроенных функций. Ознакомьтесь с этим частичным списком функций для списков. Полные списки функций для списков Listи изменяемых списков можно найти в документации Kotlin MutableList.

Функция

Цель

add(element: E)

Добавить элемент в изменяемый список.

remove(element: E)

Удалить элемент из изменяемого списка.

reversed()

Возвращает копию списка с элементами в обратном порядке.

contains(element: E)

Верните значение, trueесли список содержит нужный элемент.

subList(fromIndex: Int, toIndex: Int)

Возвращает часть списка, начиная с первого индекса и заканчивая вторым индексом, но не включая его.

  1. Продолжая работу в REPL, создайте список чисел и вызовите sum()к нему метод. Это суммирует все элементы.
val list = listOf(1, 5, 3, 4)
println(list.sum())
⇒ 13
  1. Создайте список строк и просуммируйте его.
val list2 = listOf("a", "bbb", "cc")
println(list2.sum())
⇒ error: none of the following functions can be called with the arguments supplied:
  1. Если элемент не является чем-то, Listчто можно просуммировать напрямую, например, строкой, вы можете указать способ суммирования с .sumBy()помощью лямбда-функции, например, суммировать по длине каждой строки. Как мы уже упоминали в предыдущем практическом занятии, имя по умолчанию для аргумента лямбда-функции — [ it.здесь] — это itимя, обозначающее каждый элемент списка по мере его обхода.
val list2 = listOf("a", "bbb", "cc")
println(list2.sumBy { it.length })
⇒ 6
  1. Списки предоставляют гораздо больше возможностей. Один из способов оценить их функциональность — создать список в IntelliJ IDEA, добавить точку, а затем посмотреть на подсказку автозавершения. Это работает для любого объекта. Попробуйте это со списком.

7accafeefe61a724.png

  1. Выберите элемент listIterator()из списка, затем пройдитесь по списку с помощью forоператора и выведите все элементы, разделенные пробелами.
val list2 = listOf("a", "bbb", "cc")
for (s in list2.listIterator()) {
    println("$s ")
}
⇒ a bbb cc

Шаг 2: Попробуйте хэш-карты

Хэш-карты — ещё одна полезная структура данных. Они позволяют хранить значение и дополнительный объект, который можно использовать для ссылки на сохранённые значения. Например, если вам нужно хранить рост всех учеников вашего класса или города, и вам не нужно знать, кто есть кто, вы можете хранить рост в хэш-карте List. Если же вам нужно хранить имя человека, вы можете использовать имя в качестве ключа, а рост — в качестве значения. В Kotlin можно создавать хэш-карты, которые связывают (или отображают) практически всё с чем угодно, используя хэш-карты hashMapOf(). Хэш-карты представляют собой список пар, где первое значение выступает в качестве ключа поиска для второго значения.

  1. Создайте хеш-таблицу, которая сопоставляет общепринятые названия рыб (ключи) и научные названия этих рыб (значения).
val scientific = hashMapOf("guppy" to "poecilia reticulata", "catfish" to "corydoras", "zebra fish" to "danio rerio" )

  1. Затем вы можете получить значение научного названия на основе общепринятого ключа названий рыб, используя get()квадратные скобки или даже более короткие [].
println (scientific.get("guppy"))
⇒ poecilia reticulata
println(scientific.get("zebra fish"))
⇒ danio rerio
  1. Попробуйте указать название рыбы, которого нет на карте.
println("scientific.get("swordtail"")
⇒ null

Если ключ отсутствует в карте, попытка вернуть соответствующее научное название приводит к ошибке null. В зависимости от данных карты, может быть распространенным явлением отсутствие совпадения для возможного ключа. Для таких случаев Kotlin предоставляет соответствующую getOrDefault()функцию.

  1. Попробуйте найти ключ, для которого нет совпадений, используя getOrDefault().
println(scientific.getOrDefault("swordtail", "sorry, I don't know"))
⇒ sorry, I don't know

Если вам нужно сделать больше, чем просто вернуть значение, Kotlin предоставляет такую getOrElse()​​функцию.

  1. Измените свой код, используя getOrElse()вместо getOrDefault().
println(scientific.getOrElse("swordtail") {"sorry, I don't know"})
⇒ sorry, I don't know

{}Вместо возврата простого значения по умолчанию выполняется весь код, заключенный в фигурные скобки . В примере функция elseпросто возвращает строку, но это может быть и более сложная операция, например, поиск веб-страницы с подробным научным описанием и его возврат.

Подобно этому mutableListOf, вы также можете создать карту mutableMapOf. Изменяемая карта позволяет добавлять и удалять элементы. Изменяемая карта означает, что элементы можно изменять, неизменяемая — что их нельзя изменять.


Last modified: Sunday, 5 April 2026, 2:15 PM