0Pricing
Scala for Backend Engineering & Functional Programming · Урок

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 — локальная установка не требуется.

Все уроки этого курса

  1. List, Vector, Set, Map
  2. Преобразования
  3. Свёртка и редукция
  4. Группировка и сортировка
← Назад к Scala for Backend Engineering & Functional Programming