Skip to content
This repository has been archived by the owner on May 4, 2021. It is now read-only.

Latest commit

 

History

History
106 lines (64 loc) · 9.72 KB

readme.md

File metadata and controls

106 lines (64 loc) · 9.72 KB

Коллекции в Скала

Коллекция – это сущность, которая хранит множество однотипных (за исключением кортежей, которые позволяют хранить элементы разных типов) элементов. Также, обеспечивается последовательный или случайный доступ к элементам коллекциям.

alt text

1 - Типажи коллекций:

2.1 - Конкретные неизменяемые классы коллекций (immutable collection classes):

Scala предоставляет множество конкретных неизменяемых классов коллекций на выбор. Они отличаются типажами, которые они реализуют (отображения, наборы, последовательности), конечностью и скоростью различных операций. Вот некоторые из наиболее распространенных неизменяемых типов коллекций, используемых в Скала:

2.2 - Конкретные изменяемые классы коллекций (mutable collection classes):

Характеристики коллеций скала:

Простота в использовании: Небольшой лексикон 20-50 методов достаточно для решения большинства проблем. Не нужно обертывать голову (head) коллекции вокруг сложных циклов или рекурсий. Стойкие коллекции и операции без побочных эффектов означают, что вам не нужно беспокоиться о случайном повреждении существующих коллекций новыми данными.

Краткость: вы можете достичь цели одним словом, вместо одного или нескольких циклов. Вы можете выразить функциональные операции с легким синтаксисом и объединить операции без особых усилий, чтобы результат выглядел как обычная алгебра.

Безопасность: статически типизированный и функциональный характер коллекций Скала означает, что подавляющее большинство ошибок, которые вы могли бы сделать, будут пойманы во время компиляции.

Скорость: операции сбора настраиваются и оптимизируются в библиотеках. В результате использование коллекций, как правило, довольно эффективно. Возможно, вы сможете сделать немного лучше с тщательно обработанными вручную структурами данных и операциями, но вы также можете сделать намного хуже, сделав некоторые субоптимальные решения по реализации на этом пути. Параллельные коллекции поддерживают те же операции, что и последовательные, поэтому новые операции не нужно изучать, и код не требуется переписывать. Вы можете превратить последовательную коллекцию в параллельную, просто используя метод par.

Универсальность: Коллекции предоставляют те же операции для любого типа, где это имеет смысл. Таким образом, вы можете добиться многого с довольно небольшим лексиконом операций. Например, строка является концептуально последовательностью символов. Следовательно, в коллекциях Скала строки поддерживают все операции последовательности. То же самое относится к массивам.

Пример. Вот одна строка кода, которая демонстрирует многие преимущества коллекций Скала.

  val (несовершеннолетние, взрослые) = люди partition (_.возраст < 18)
  

Сразу видно, что делает эта операция: она разбивает коллекцию людей на несовершеннолетних и взрослых в зависимости от их возраста. Поскольку метод разделения определен в корневом наборе типа TraversableLike, этот код работает для любой коллекции, включая массивы. Полученные коллекции несовершеннолетних и взрослых будут иметь тот же тип, что и коллекция людей.

Этот код намного более краткий, чем от одной до трех циклов, необходимых для традиционной обработки коллекции (три цикла для массива, потому что промежуточные результаты нужно буферизировать где-то в другом месте). После того, как вы изучили базовые операции, вы также найдете, что этот код намного проще и безопаснее, чем писать явные циклы. В этом проекте подробно рассматривается API-интерфейс классов коллекций Скала с точки зрения пользователя.

Если этот проект окажется полезным тебе - нажми на кнопочку в правом верхнем углу.