List, Vector, Set, Map
Основные коллекции
«List, Vector, Set, Map» — бесплатный урок Scala for Backend Engineering & Functional Programming на CoddyKit. Это урок 1 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Scala for Backend Engineering & Functional Programming, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Scala for Backend Engineering & Functional Programming содержит 4 уроков всего.
Основные коллекции Scala
Scala предоставляет несколько неизменяемых коллекций в стандартной библиотеке. Чаще всего Вы будете использовать четыре: List, Vector, Set и Map. У каждой свои характеристики производительности и семантика.
object Main {
def main(args: Array[String]): Unit = {
val list = List(1, 2, 3)
val vector = Vector(1, 2, 3)
val set = Set(1, 2, 3)
val map = Map("a" -> 1, "b" -> 2)
println(list)
println(vector)
println(set)
println(map)
}
}List: связный список
List — односвязный список. Добавление элемента в начало с помощью :: выполняется за O(1) и работает быстро, а произвольный доступ и добавление в конец — за O(n). Он идеально подходит для рекурсии и использования в качестве стека.
object Main {
def main(args: Array[String]): Unit = {
val xs = List(2, 3, 4)
val prepended = 1 :: xs
println(prepended)
println("head: " + xs.head)
println("tail: " + xs.tail)
}
}Vector: сбалансированная универсальная коллекция
Vector — индексированная последовательность с практически постоянным временем доступа, обновления, добавления в начало и добавления в конец: O(1). Если Вам нужен быстрый произвольный доступ или универсальная последовательность, выбирайте Vector, а не List.
object Main {
def main(args: Array[String]): Unit = {
val v = Vector(10, 20, 30, 40)
println(v(2))
val updated = v.updated(0, 99)
println(updated)
println(v :+ 50)
}
}Set: уникальные элементы
Set хранит уникальные элементы без дубликатов и гарантированного порядка. Проверки принадлежности с помощью contains выполняются быстро.
object Main {
def main(args: Array[String]): Unit = {
val s = Set(1, 2, 2, 3, 3, 3)
println(s)
println(s.contains(2))
println(s + 4)
println(s - 1)
}
}Операции над Set
Множества поддерживают математические операции: union (|), intersect (&) и diff (−−).
object Main {
def main(args: Array[String]): Unit = {
val a = Set(1, 2, 3)
val b = Set(2, 3, 4)
println(a union b)
println(a intersect b)
println(a diff b)
}
}Map: пары ключ-значение
Map связывает ключи со значениями. Ключи уникальны. Создавайте записи с помощью стрелки ->, а значения получайте с помощью get (возвращает Option) или apply.
object Main {
def main(args: Array[String]): Unit = {
val ages = Map("Ann" -> 30, "Bob" -> 25)
println(ages("Ann"))
println(ages.get("Cara"))
println(ages.getOrElse("Cara", 0))
}
}Неизменяемое обновление Map
Неизменяемые отображения возвращают новое отображение при добавлении или удалении записей; исходное при этом не изменяется. Используйте + для добавления или перезаписи и - для удаления.
object Main {
def main(args: Array[String]): Unit = {
val m = Map("a" -> 1)
val m2 = m + ("b" -> 2)
val m3 = m2 - "a"
println(m)
println(m2)
println(m3)
}
}Итерация по Map
При итерации по Map Вы получаете кортежи ключ-значение. Их можно сразу распаковать в for-выражении или с помощью сопоставления с образцом.
object Main {
def main(args: Array[String]): Unit = {
val scores = Map("math" -> 90, "art" -> 75)
for ((subject, score) <- scores) {
println(s"$subject: $score")
}
}
}Общие методы всех коллекций
У всех этих коллекций есть общий программный интерфейс: size, isEmpty, map, filter, foreach и другие методы. Изучите интерфейс один раз — и сможете применять его повсюду.
object Main {
def main(args: Array[String]): Unit = {
println(List(1, 2, 3).map(_ * 2))
println(Vector(1, 2, 3).map(_ * 2))
println(Set(1, 2, 3).map(_ * 2))
}
}Преобразование коллекций
Методы преобразования, такие как toList, toVector, toSet и toMap, позволяют легко менять тип коллекции. Преобразование в Set удаляет дубликаты.
object Main {
def main(args: Array[String]): Unit = {
val withDupes = List(1, 1, 2, 3, 3)
println(withDupes.toSet)
val pairs = List(("a", 1), ("b", 2))
println(pairs.toMap)
}
}Выбор подходящей коллекции
Краткое руководство:
List— рекурсия, быстрое добавление в начало, обработка начала и хвостаVector— универсальное применение, быстрый индексированный доступSet— уникальность и проверки принадлежностиMap— поиск по ключу
object Main {
def main(args: Array[String]): Unit = {
val ids = List(5, 3, 5, 1, 3)
val unique = ids.toSet
val indexed = ids.toVector
println(s"unique count: ${unique.size}")
println(s"third element: ${indexed(2)}")
}
}Быстрая проверка
Какая коллекция автоматически удаляет дубликаты элементов?
Итоги
Вы познакомились с основными неизменяемыми коллекциями Scala:
- List — связный список, быстрое добавление в начало
- Vector — индексированная коллекция со сбалансированной производительностью
- Set — уникальные элементы и операции над множествами
- Map — поиск по ключу с помощью
get/getOrElse
У них богатый общий программный интерфейс, и их легко преобразовывать друг в друга.
Часто задаваемые вопросы
Урок «List, Vector, Set, Map» бесплатный?
Да — полный текст урока «List, Vector, Set, Map» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Scala for Backend Engineering & Functional Programming, подпишись на CoddyKit PRO. Курс Scala for Backend Engineering & Functional Programming содержит 4 уроков всего.
Чему я научусь в уроке «List, Vector, Set, Map»?
Основные коллекции Ты практикуешь Scala for Backend Engineering & Functional Programming с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Scala for Backend Engineering & Functional Programming?
Предыдущий опыт не требуется. Scala for Backend Engineering & Functional Programming на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 1 из 4.
Сколько времени занимает урок «List, Vector, Set, Map»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Scala for Backend Engineering & Functional Programming?
Да. Каждый урок Scala for Backend Engineering & Functional Programming включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- List, Vector, Set, Map
- Преобразования
- Свёртка и редукция
- Группировка и сортировка