Spec-Zone.ru › Scala 2.13 Library

Пакет scala.collection.immutable

пакет immutable

Источник
package.scala
Линейные супертипы
AnyRef, Any

Члены-типы

final служебный класс ::[+A](head: A, next: List[A]) extends List[A] с Product с Serializable

абстрактный класс AbstractMap[K, +V] extends collection.AbstractMap[K, V] с Map[K, V]

Явное создание экземпляра интерфейса Map для уменьшения размера файла классов в подклассах.

Аннотации
@SerialVersionUID()

абстрактный класс AbstractSeq[+A] extends collection.AbstractSeq[A] с Seq[A]

Явное создание экземпляра интерфейса Seq для уменьшения размера файла классов в подклассах.

Аннотации
@SerialVersionUID()

абстрактный класс AbstractSet[A] extends collection.AbstractSet[A] с Set[A]

Явное создание экземпляра интерфейса Set для уменьшения размера файла классов в подклассах.

Аннотации
@SerialVersionUID()

запечатанный абстрактный класс ArraySeq[+A] extends AbstractSeq[A] с IndexedSeq[A] с IndexedSeqOps[A, ArraySeq, ArraySeq[A]] с StrictOptimizedSeqOps[A, ArraySeq, ArraySeq[A]] с EvidenceIterableFactoryDefaults[A, ArraySeq, ClassTag] с Serializable

Неизменяемый массив.

Поддерживает эффективное индексированное обращение и имеет небольшой размер в памяти.

запечатанный абстрактный класс BitSet extends AbstractSet[Int] с SortedSet[Int] с SortedSetOps[Int, SortedSet, BitSet] с StrictOptimizedSortedSetOps[Int, SortedSet, BitSet] с collection.BitSet с BitSetOps[BitSet] с Serializable

Класс для неизменяемых битовых наборов.

Битовые наборы — это наборы целых чисел без знака, которые представлены массивами переменного размера бит, упакованными в 64-битные слова. Размер памяти битового набора определяется наибольшим числом, хранящимся в нем.

См. также

"Обзор библиотеки коллекций Scala" раздел по Immutable BitSets для получения дополнительной информации.

final class HashMap[K, +V] extends AbstractMap[K, V] with StrictOptimizedMapOps[K, V, HashMap, HashMap[K, V]] with MapFactoryDefaults[K, V, HashMap, Iterable] with DefaultSerializable

Этот класс реализует неизменяемые карты, используя сжатое хэш-массивовое префиксное дерево. Дополнительные сведения см. в статье https://michael.steindorfer.name/publications/oopsla15.pdf.

K

тип ключей, содержащихся в этом наборе.

V

тип значений, связанных с ключами в этой карте.

Since

2.13

final class HashSet[A] extends AbstractSet[A] with StrictOptimizedSetOps[A, HashSet, HashSet[A]] with IterableFactoryDefaults[A, HashSet] with DefaultSerializable

Этот класс реализует неизменяемые множества, используя сжатое хэш-массивовое префиксное дерево. Дополнительные сведения см. в статье https://michael.steindorfer.name/publications/oopsla15.pdf.

A

тип элементов, содержащихся в этом наборе.

Since

2.13

trait IndexedSeq[+A] extends Seq[A] with collection.IndexedSeq[A] with IndexedSeqOps[A, IndexedSeq, IndexedSeq[A]] with IterableFactoryDefaults[A, IndexedSeq]

trait IndexedSeqOps[+A, +CC[_], +C] extends SeqOps[A, CC, C] with collection.IndexedSeqOps[A, CC, C]

sealed abstract class IntMap[+T] extends AbstractMap[immutable.IntMapUtils.Int, T] with StrictOptimizedMapOps[immutable.IntMapUtils.Int, T, Map, IntMap[T]] with Serializable

Специализированная неизменяемая структура карты для целочисленных ключей, основанная на быстрых объединяемых целочисленных картах Окасаки и Гила. По сути, это trie, основанное на двоичных цифрах целых чисел.

Примечание: Этот класс, начиная с версии 2.8, в значительной степени устарел по сравнению с HashMap.

T

тип значений, связанных с целочисленными ключами.

Since

2.7

trait Iterable[+A] extends collection.Iterable[A] with IterableOps[A, Iterable, Iterable[A]] with IterableFactoryDefaults[A, Iterable]

Трейт для коллекций, гарантированно неизменяемых.

A

тип элементов коллекции

final class LazyList[+A] extends AbstractSeq[A] with LinearSeq[A] with LinearSeqOps[A, LazyList, LazyList[A]] with IterableFactoryDefaults[A, LazyList] with Serializable

Этот класс реализует неизменяемый связанный список, который вычисляет элементы в порядке и только при необходимости. Вот пример:

import scala.math.BigInt
object Main extends App {

  val fibs: LazyList[BigInt] = BigInt(0) #:: BigInt(1) #:: fibs.zip(fibs.tail).map { n => n._1 + n._2 }

  fibs take 5 foreach println
}

// prints
//
// 0
// 1
// 1
// 2
// 3

Элементы LazyList запоминаются в кэше; то есть, значение каждого элемента вычисляется только один раз. Чтобы проиллюстрировать, мы изменим тело fibs значение выше и возьмём ещё несколько значений:

import scala.math.BigInt
object Main extends App {

  val fibs: LazyList[BigInt] = BigInt(0) #:: BigInt(1) #:: fibs.zip(
    fibs.tail).map(n => {
      println("Adding %d and %d".format(n._1, n._2))
      n._1 + n._2
    })

  fibs take 5 foreach println
  fibs take 6 foreach println
}

// prints
//
// 0
// 1
// Adding 0 and 1
// 1
// Adding 1 and 1
// 2
// Adding 1 and 2
// 3

// And then prints
//
// 0
// 1
// 1
// 2
// 3
// Adding 2 and 3
// 5

Существует ряд тонких моментов в приведенном примере.

    Определение fibs является val, а не методом. Кеширование LazyList требует, чтобы у нас было место для хранения информации, а val позволяет нам это сделать. Хотя LazyList фактически изменяется при доступе, это не меняет концепции его неизменяемости. После запоминания значения они не изменяются, а значения, которые ещё не были запомнены, всё ещё "существуют", просто они ещё не были реализованы.Следует быть осторожными с кэшированием; вы очень быстро можете израсходовать большое количество памяти, если не будете осторожны. Причиной этого является то, что кэширование LazyList создаёт структуру, очень похожую на scala.collection.immutable.List. Пока что-то держит голову, голова держит хвост, и так далее рекурсивно. С другой стороны, если ничего не держит голову (например, мы использовали def для определения LazyList), то как только она больше не используется непосредственно, она исчезает.Обратите внимание, что некоторые операции, включая drop, dropWhile, flatMap или collect могут обработать большое количество промежуточных элементов перед возвратом. Они обязательно удерживают голову, так как являются методами LazyList, а ленивый список держит свою собственную голову. Для вычислений такого типа, где кэширование нежелательно, используйте Iterator когда это возможно.
// For example, let's build the natural numbers and do some silly iteration
// over them.

// We'll start with a silly iteration
def loop(s: String, i: Int, iter: Iterator[Int]): Unit = {
  // Stop after 200,000
  if (i < 200001) {
    if (i % 50000 == 0) println(s + i)
    loop(s, iter.next(), iter)
  }
}

// Our first LazyList definition will be a val definition
val lazylist1: LazyList[Int] = {
  def loop(v: Int): LazyList[Int] = v #:: loop(v + 1)
  loop(0)
}

// Because lazylist1 is a val, everything that the iterator produces is held
// by virtue of the fact that the head of the LazyList is held in lazylist1
val it1 = lazylist1.iterator
loop("Iterator1: ", it1.next(), it1)

// We can redefine this LazyList such that all we have is the Iterator left
// and allow the LazyList to be garbage collected as required.  Using a def
// to provide the LazyList ensures that no val is holding onto the head as
// is the case with lazylist1
def lazylist2: LazyList[Int] = {
  def loop(v: Int): LazyList[Int] = v #:: loop(v + 1)
  loop(0)
}
val it2 = lazylist2.iterator
loop("Iterator2: ", it2.next(), it2)

// And, of course, we don't actually need a LazyList at all for such a simple
// problem.  There's no reason to use a LazyList if you don't actually need
// one.
val it3 = new Iterator[Int] {
  var i = -1
  def hasNext = true
  def next(): Int = { i += 1; i }
}
loop("Iterator3: ", it3.next(), it3)
    Тот факт, что tail работает вообще, вызывает интерес. В определении fibs у нас есть начальное (0, 1, LazyList(...)), поэтому tail детерминировано. Если бы мы определили fibs, так что только 0 были бы конкретно известны, то действие определения tail потребовало бы оценки tail, что вызвало бы бесконечную рекурсию и переполнение стека. Если мы определим определение, где хвост изначально не вычисляется, то у нас будет бесконечная рекурсия:
// The first time we try to access the tail we're going to need more
// information which will require us to recurse, which will require us to
// recurse, which...
lazy val sov: LazyList[Vector[Int]] = Vector(0) #:: sov.zip(sov.tail).map { n => n._1 ++ n._2 }

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

lazy val fib: LazyList[Int] = {
  def loop(h: Int, n: Int): LazyList[Int] = h #:: loop(n, h + n)
  loop(1, 1)
}
A

тип элементов, содержащихся в этом ленивом списке.

Аннотации
@SerialVersionUID()
С тех пор

2.13

См. также

Обзор библиотеки коллекций Scala раздел по LazyLists для дополнительной информации.

trait LinearSeq[+A] extends Seq[A] with collection.LinearSeq[A] with LinearSeqOps[A, LinearSeq, LinearSeq[A]] with IterableFactoryDefaults[A, LinearSeq]

trait LinearSeqOps[+A, +CC[X] <: LinearSeq[X], +C <: LinearSeq[A] with LinearSeqOps[A, CC, C]] extends SeqOps[A, CC, C] with collection.LinearSeqOps[A, CC, C]

sealed abstract class List[+A] extends AbstractSeq[A] with LinearSeq[A] with LinearSeqOps[A, List, List[A]] with StrictOptimizedLinearSeqOps[A, List, List[A]] with StrictOptimizedSeqOps[A, List, List[A]] with IterableFactoryDefaults[A, List] with DefaultSerializable

Класс неизменяемых связанных списков, представляющих упорядоченные коллекции элементов типа A.

Этот класс поставляется с двумя реализующими case-классами scala.Nil и scala.::, которые реализуют абстрактные члены isEmpty, head и tail.

Этот класс оптимален для шаблонов доступа «последний вошел — первый вышел» (LIFO), подобных стеку. Если вам нужен другой шаблон доступа, например, случайный доступ или FIFO, рассмотрите использование коллекции, более подходящей для этого, чем List.

Производительность

Время: List имеет O(1) добавление в начало и доступ к голове/хвосту. Большинство других операций зависят от O(n) количества элементов в списке. Это включает индексный поиск элементов, length, append и reverse.

Память: List реализует структурное совместное использование хвостового списка. Это означает, что многие операции имеют стоимость, либо нулевую, либо постоянную.

val mainList = List(3, 2, 1)
val with4 =    4 :: mainList  // re-uses mainList, costs one :: instance
val with42 =   42 :: mainList // also re-uses mainList, cost one :: instance
val shorter =  mainList.tail  // costs nothing as it uses the same 2::1::Nil instances as mainList
Аннотации
@SerialVersionUID()
Пример:
    // Make a list via the companion object factory
    val days = List("Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday")
    
    // Make a list element-by-element
    val when = "AM" :: "PM" :: Nil
    
    // Pattern match
    days match {
      case firstDay :: otherDays =>
        println("The first day of the week is: " + firstDay)
      case Nil =>
        println("There don't seem to be any week days.")
    }
С момента

1.0

Примечание

Функциональный список характеризуется сохранением состояния и структурным совместным использованием, что обеспечивает значительные преимущества в отношении производительности и потребления памяти в некоторых сценариях, если используется правильно. Однако обратите внимание, что объекты, имеющие несколько ссылок на один и тот же функциональный список (то есть объекты, которые полагаются на совместное использование структуры), будут сериализованы и десериализованы с несколькими списками, по одному для каждой ссылки на него. То есть совместное использование структуры теряется после сериализации/десериализации.

См. также

"Обзор библиотеки коллекций Scala" раздел по Lists для получения дополнительной информации.

sealed class ListMap[K, +V] extends AbstractMap[K, V] with SeqMap[K, V] with StrictOptimizedMapOps[K, V, ListMap, ListMap[K, V]] with MapFactoryDefaults[K, V, ListMap, Iterable] with DefaultSerializable

Этот класс реализует неизменяемые карты, используя структуру данных на основе списка. Итераторы и методы обхода карты ListMap посещают пары ключ-значение в порядке их первоначального вставки.

Элементы хранятся во внутренней обратной последовательности вставки, то есть самый последний ключ находится в голове списка. Таким образом, такие методы, как head и tail, имеют сложность O(n), в то время как last и init имеют сложность O(1). Другие операции, такие как вставка или удаление элементов, также имеют сложность O(n), что делает эту коллекцию подходящей только для небольшого количества элементов.

Экземпляры ListMap представляют пустые карты; они могут быть созданы, либо напрямую вызвав конструктор, либо применив функцию ListMap.empty.

K

тип ключей, содержащихся в этой карте ListMap

V

тип значений, связанных с ключами

С момента

1

sealed class ListSet[A] extends AbstractSet[A] with StrictOptimizedSetOps[A, ListSet, ListSet[A]] with IterableFactoryDefaults[A, ListSet] with DefaultSerializable

Этот класс реализует неизменяемые множества, используя структуру данных на основе списка. Итераторы и методы обхода множества ListSet посещают элементы в порядке их первоначального вставки.

Элементы хранятся во внутренней обратной последовательности вставки, то есть самый последний элемент находится в голове списка. Таким образом, такие методы, как head и tail, имеют сложность O(n), в то время как last и init имеют сложность O(1). Другие операции, такие как вставка или удаление элементов, также имеют сложность O(n), что делает эту коллекцию подходящей только для небольшого количества элементов.

Экземпляры ListSet представляют пустые множества; они могут быть созданы, либо напрямую вызвав конструктор, либо применив функцию ListSet.empty.

A

тип элементов, содержащихся в этом множестве ListSet

С момента

1

sealed abstract class LongMap[+T] extends AbstractMap[immutable.LongMapUtils.Long, T] with StrictOptimizedMapOps[immutable.LongMapUtils.Long, T, Map, LongMap[T]] with Serializable

Специализированная неизменяемая структура отображения для ключей типа long, основанная на быстрых объединяемых картах long Okasaki и Gill. По существу, это дерево, основанное на двоичных цифрах целых чисел.

Примечание: Этот класс с версии 2.8 в значительной степени устарел по сравнению с HashMap.

T

Тип значений, связанных с ключами типа long.

Since

2.7

trait Map[K, +V] extends Iterable[(K, V)] with collection.Map[K, V] with MapOps[K, V, Map, Map[K, V]] with MapFactoryDefaults[K, V, Map, Iterable]

trait MapOps[K, +V, +CC[X, +Y] <: MapOps[X, Y, CC, _], +C <: MapOps[K, V, CC, C]] extends IterableOps[(K, V), Iterable, C] with collection.MapOps[K, V, CC, C]

sealed class NumericRange[T] extends AbstractSeq[T] with IndexedSeq[T] with IndexedSeqOps[T, IndexedSeq, IndexedSeq[T]] with StrictOptimizedSeqOps[T, IndexedSeq, IndexedSeq[T]] with IterableFactoryDefaults[T, IndexedSeq] with Serializable

NumericRange — более обобщённая версия класса Range, работающая с произвольными типами. Она требует реализации типа диапазона.

Фабрики для распространённых типов включают в себя ..., ..., и ... . ... существует для полноты, но основанный на ... диапазон должен быть более производительным.

val r1 = Range(0, 100, 1)
val veryBig = Int.MaxValue.toLong + 1
val r2 = Range.Long(veryBig, veryBig + 100, 1)
assert(r1 sameElements r2.map(_ - veryBig))
Annotations
@SerialVersionUID()

sealed class Queue[+A] extends AbstractSeq[A] with LinearSeq[A] with LinearSeqOps[A, Queue, Queue[A]] with StrictOptimizedLinearSeqOps[A, Queue, Queue[A]] with StrictOptimizedSeqOps[A, Queue, Queue[A]] with IterableFactoryDefaults[A, Queue] with DefaultSerializable

Queue объекты реализуют структуры данных, которые позволяют вставлять и извлекать элементы в порядке очереди (FIFO).

Queue реализуется как пара List списков, один содержащий элементы ввод, а другой — элементы вывод. Элементы добавляются в список ввод и удаляются из списка вывод. Когда список вывод пустеет, очередь поворачивается путем замены списка вывод на in.reverse, а in на Nil.

Добавление элементов в очередь всегда имеет стоимость O(1). Удаление элементов имеет стоимость O(1), за исключением случаев, когда требуется поворот, в этом случае взимается стоимость O(n), где n — количество элементов в очереди. Когда это происходит, n операций удаления со стоимостью O(1) гарантированы. Удаление элемента в среднем составляет O(1).

Since

1

См. также

"Обзор библиотеки коллекций Scala" раздел по Immutable Queues для получения дополнительной информации.

sealed abstract class Range extends AbstractSeq[Int] with IndexedSeq[Int] with IndexedSeqOps[Int, IndexedSeq, IndexedSeq[Int]] with StrictOptimizedSeqOps[Int, IndexedSeq, IndexedSeq[Int]] with IterableFactoryDefaults[Int, IndexedSeq] with Serializable

Класс Range представляет целые значения в диапазоне [start;end) с ненулевым значением шага step. Это специальный случай индексированной последовательности. Например:

val r1 = 0 until 10
val r2 = r1.start until r1.end by r1.step + 1
println(r2.length) // = 5

Диапазоны, содержащие более Int.MaxValue элементов, могут быть созданы, но эти переполненные диапазоны имеют ограниченные возможности. Любой метод, который может потребовать создания коллекции длиной более Int.MaxValue элементов, или может быть попрошен индексировать сверх Int.MaxValue элементов, выбросит исключение. Переполненные диапазоны могут безопасно быть уменьшены в размере путем изменения размера шага (например, by 3) или взятия/удаления элементов. contains, equals, и доступ к концам диапазона (head, last, tail, init) также разрешены для переполненных диапазонов.

Аннотации
@SerialVersionUID()

trait Seq[+A] extends Iterable[A] with collection.Seq[A] with SeqOps[A, Seq, Seq[A]] with IterableFactoryDefaults[A, Seq]

trait SeqMap[K, +V] extends Map[K, V] with collection.SeqMap[K, V] with MapOps[K, V, SeqMap, SeqMap[K, V]] with MapFactoryDefaults[K, V, SeqMap, Iterable]

Общий интерфейс для упорядоченных неизменяемых карт. Конкретные классы должны предоставить функциональность для абстрактных методов в SeqMap.

Обратите внимание, что при проверке на равенство SeqMap не учитывает порядок.

K

тип ключей, содержащихся в этой связанной карте.

V

тип значений, связанных с ключами в этой связанной карте.

Version

2.13

Since

2.13

trait SeqOps[+A, +CC[_], +C] extends collection.SeqOps[A, CC, C]

trait Set[A] extends Iterable[A] with collection.Set[A] with SetOps[A, Set, Set[A]] with IterableFactoryDefaults[A, Set]

trait SetOps[A, +CC[X], +C <: SetOps[A, CC, C]] extends collection.SetOps[A, CC, C]

trait SortedMap[K, +V] extends Map[K, V] with collection.SortedMap[K, V] with SortedMapOps[K, V, SortedMap, SortedMap[K, V]] with SortedMapFactoryDefaults[K, V, SortedMap, Iterable, Map]

Неизменяемая карта, пары ключ-значение которой отсортированы в соответствии с порядком scala.math.Ordering по ключам.

Позволяет выполнять запросы по диапазонам к своим ключам, и реализации должны гарантировать, что обход происходит в отсортированном порядке, в соответствии с scala.math.Ordering карты.

K

тип ключей, содержащихся в этой деревесной карте.

V

тип значений, связанных с ключами.

Пример:
    import scala.collection.immutable.SortedMap
    
    // Make a SortedMap via the companion object factory
    val weekdays = SortedMap(
      2 -> "Monday",
      3 -> "Tuesday",
      4 -> "Wednesday",
      5 -> "Thursday",
      6 -> "Friday"
    )
    // TreeMap(2 -> Monday, 3 -> Tuesday, 4 -> Wednesday, 5 -> Thursday, 6 -> Friday)
    
    val days = weekdays ++ List(1 -> "Sunday", 7 -> "Saturday")
    // TreeMap(1 -> Sunday, 2 -> Monday, 3 -> Tuesday, 4 -> Wednesday, 5 -> Thursday, 6 -> Friday, 7 -> Saturday)
    
    val day3 = days.get(3) // Some("Tuesday")
    
    val rangeOfDays = days.range(2, 5) // TreeMap(2 -> Monday, 3 -> Tuesday, 4 -> Wednesday)
    
    val daysUntil2 = days.rangeUntil(2) // TreeMap(1 -> Sunday)
    val daysTo2 = days.rangeTo(2) // TreeMap(1 -> Sunday, 2 -> Monday)
    val daysAfter5 = days.rangeFrom(5) //  TreeMap(5 -> Thursday, 6 -> Friday, 7 -> Saturday)

интерфейс SortedMapOps[K, +V, +CC[X, +Y] <: Map[X, Y] with SortedMapOps[X, Y, CC, _], +C <: SortedMapOps[K, V, CC, C]] реализует MapOps[K, V, Map, C] и collection.SortedMapOps[K, V, CC, C]

интерфейс SortedSet[A] реализует Set[A] и collection.SortedSet[A] и SortedSetOps[A, SortedSet, SortedSet[A]] и SortedSetFactoryDefaults[A, SortedSet, Set]

интерфейс SortedSetOps[A, +CC[X] <: SortedSet[X], +C <: SortedSetOps[A, CC, C]] реализует SetOps[A, Set, C] и collection.SortedSetOps[A, CC, C]

интерфейс StrictOptimizedMapOps[K, +V, +CC[X, +Y] <: MapOps[X, Y, CC, _], +C <: MapOps[K, V, CC, C]] реализует MapOps[K, V, CC, C] и collection.StrictOptimizedMapOps[K, V, CC, C] и StrictOptimizedIterableOps[(K, V), Iterable, C]

интерфейс StrictOptimizedSeqOps[+A, +CC[_], +C] реализует SeqOps[A, CC, C] и collection.StrictOptimizedSeqOps[A, CC, C] и StrictOptimizedIterableOps[A, CC, C]

интерфейс StrictOptimizedSetOps[A, +CC[X], +C <: SetOps[A, CC, C]] extends SetOps[A, CC, C] with collection.StrictOptimizedSetOps[A, CC, C] with StrictOptimizedIterableOps[A, CC, C]

интерфейс StrictOptimizedSortedMapOps[K, +V, +CC[X, +Y] <: Map[X, Y] with SortedMapOps[X, Y, CC, _], +C <: SortedMapOps[K, V, CC, C]] extends SortedMapOps[K, V, CC, C] with collection.StrictOptimizedSortedMapOps[K, V, CC, C] with StrictOptimizedMapOps[K, V, Map, C]

интерфейс StrictOptimizedSortedSetOps[A, +CC[X] <: SortedSet[X], +C <: SortedSetOps[A, CC, C]] extends SortedSetOps[A, CC, C] with collection.StrictOptimizedSortedSetOps[A, CC, C] with StrictOptimizedSetOps[A, Set, C]

тип StringOps = collection.StringOps

тип StringView = collection.StringView

final класс TreeMap[K, +V] extends AbstractMap[K, V] with SortedMap[K, V] with StrictOptimizedSortedMapOps[K, V, TreeMap, TreeMap[K, V]] with SortedMapFactoryDefaults[K, V, TreeMap, Iterable, Map] with DefaultSerializable

Неизменяемый отсортированный список (SortedMap), значения которого хранятся в красно-чёрном дереве.

Этот класс оптимален, когда будут выполняться запросы по диапазону или когда требуется обход в порядке сортировки. Если вам нужны только поиски по ключу и порядок обхода значений по ключу не важен, рассмотрите использование * scala.collection.immutable.HashMap, который, как правило, имеет лучшую производительность. Если вам нужен порядок вставки, рассмотрите * scala.collection.immutable.SeqMap, для которого не требуется указание порядка.

K

Тип ключей, содержащихся в этом дереве отображений.

V

Тип значений, связанных с ключами.

Пример:
    import scala.collection.immutable.TreeMap
    
    // Make a TreeMap via the companion object factory
    val weekdays = TreeMap(
      2 -> "Monday",
      3 -> "Tuesday",
      4 -> "Wednesday",
      5 -> "Thursday",
      6 -> "Friday"
    )
    // TreeMap(2 -> Monday, 3 -> Tuesday, 4 -> Wednesday, 5 -> Thursday, 6 -> Friday)
    
    val days = weekdays ++ List(1 -> "Sunday", 7 -> "Saturday")
    // TreeMap(1 -> Sunday, 2 -> Monday, 3 -> Tuesday, 4 -> Wednesday, 5 -> Thursday, 6 -> Friday, 7 -> Saturday)
    
    val day3 = days.get(3) // Some("Tuesday")
    
    val rangeOfDays = days.range(2, 5) // TreeMap(2 -> Monday, 3 -> Tuesday, 4 -> Wednesday)
    
    val daysUntil2 = days.rangeUntil(2) // TreeMap(1 -> Sunday)
    val daysTo2 = days.rangeTo(2) // TreeMap(1 -> Sunday, 2 -> Monday)
    val daysAfter5 = days.rangeFrom(5) //  TreeMap(5 -> Thursday, 6 -> Friday, 7 -> Saturday)
С

1

См. также

Обзор библиотеки коллекций Scala" раздел о Red-Black Trees для получения дополнительной информации.

final class TreeSeqMap[K, +V] extends AbstractMap[K, V] with SeqMap[K, V] with MapOps[K, V, TreeSeqMap, TreeSeqMap[K, V]] with StrictOptimizedIterableOps[(K, V), Iterable, TreeSeqMap[K, V]] with StrictOptimizedMapOps[K, V, TreeSeqMap, TreeSeqMap[K, V]] with MapFactoryDefaults[K, V, TreeSeqMap, Iterable]

Этот класс реализует неизменяемую карту, сохраняющую порядок, используя хэш-таблицу для сопоставления ключей со значениями, обеспечивая эффективный поиск, и дерево для упорядочивания ключей, обеспечивая эффективный обход и деструктуризацию в порядке вставки/модификации.

По умолчанию используется порядок вставки (TreeSeqMap.OrderBy.Insertion), но вместо него можно использовать порядок модификации (TreeSeqMap.OrderBy.Modification), если это указано при создании.

Метод orderingBy(orderBy: TreeSeqMap.OrderBy): TreeSeqMap[K, V] можно использовать для переключения на указанный порядок для возвращаемой карты.

Ключ можно вручную обновить (т.е. поместить в конец) с помощью метода refresh(key: K): TreeSeqMap[K, V] (независимо от используемого порядка).

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

K

Тип ключей, содержащихся в этой карте.

V

Тип значений, связанных с ключами в этой карте.

Версия

2.13

С

2.13

final class TreeSet[A] extends AbstractSet[A] with SortedSet[A] with SortedSetOps[A, TreeSet, TreeSet[A]] with StrictOptimizedSortedSetOps[A, TreeSet, TreeSet[A]] with SortedSetFactoryDefaults[A, TreeSet, Set] with DefaultSerializable

Этот класс реализует неизменяемые отсортированные множества, используя дерево.

A

Тип элементов, содержащихся в этом дереве множества.

С

1

См. также

Обзор библиотеки коллекций Scala" раздел о Red-Black Trees для получения дополнительной информации.

final class Vector[+A] extends AbstractSeq[A] with IndexedSeq[A] with IndexedSeqOps[A, Vector, Vector[A]] with StrictOptimizedSeqOps[A, Vector, Vector[A]] with IterableFactoryDefaults[A, Vector] with VectorPointer[A] with DefaultSerializable

Вектор — это универсальная неизменяемая структура данных. Она обеспечивает произвольный доступ и обновления за время, эффективно равное константе, а также очень быстрые добавление в начало и в конец. Поскольку векторы хорошо сочетают быстрый произвольный выбор и быстрые произвольные функциональные обновления, они в настоящее время являются реализацией по умолчанию для неизменяемых индексированных последовательностей. Он подкреплён little endian bit-mapped vector trie с разветвлением 32. Локальность очень хорошая, но не непрерывная, что хорошо для очень больших последовательностей.

A

тип элементов

См. также

"Обзор библиотеки коллекций Scala" раздел по Vectors для получения дополнительной информации.

final class VectorBuilder[A] extends ReusableBuilder[A, Vector[A]] with VectorPointer[A]

Класс для построения экземпляров Vector. Этот билдер является повторно используемым.

final class VectorMap[K, +V] extends AbstractMap[K, V] with SeqMap[K, V] with StrictOptimizedMapOps[K, V, VectorMap, VectorMap[K, V]] with MapFactoryDefaults[K, V, VectorMap, Iterable]

Этот класс реализует неизменяемые отображения, используя структуру данных вектор/отображение, которая сохраняет порядок вставки.

В отличие от ListMap, VectorMap имеет амортизированную эффективно постоянную выборку, за счет использования дополнительной памяти и, как правило, более низкой производительности для других операций

K

тип ключей, содержащихся в этом векторном отображении.

V

тип значений, связанных с ключами в этом векторном отображении.

Версия

2.13

С тех пор

2.13

final class WrappedString extends AbstractSeq[Char] with IndexedSeq[Char] with IndexedSeqOps[Char, IndexedSeq, WrappedString] with Serializable

Этот класс служит оболочкой, дополняющей строки всеми операциями, которые есть в индексированных последовательностях.

Разница между этим классом и StringOps заключается в том, что вызов методов трансформации, таких как filter и map, приведет к объекту типа WrappedString, а не String.

Аннотации
@SerialVersionUID()
С тех пор

2.8

Члены-значения

val StringOps: collection.StringOps.type

val StringView: collection.StringView.type

object ArraySeq extends StrictOptimizedClassTagSeqFactory[ArraySeq]

Этот объект предоставляет набор операций для создания ArraySeq значений.

Аннотации
@SerialVersionUID()

object BitSet extends SpecificIterableFactory[Int, BitSet] with java.io.Serializable

Этот объект предоставляет набор операций для создания immutable.BitSet значений.

Аннотации
@SerialVersionUID()

object HashMap extends MapFactory[HashMap]

Этот объект предоставляет набор операций для создания immutable.HashMap значений.

Аннотации
@SerialVersionUID()

object HashSet extends IterableFactory[HashSet]

Этот объект предоставляет набор операций для создания immutable.HashSet значений.

Аннотации
@SerialVersionUID()

object IndexedSeq extends Delegate[IndexedSeq]

Аннотации
@SerialVersionUID()

object IndexedSeqDefaults

object IntMap extends java.io.Serializable

object Iterable extends Delegate[Iterable]

Аннотации
@SerialVersionUID()

object LazyList extends SeqFactory[LazyList]

Этот объект предоставляет набор операций для создания LazyList значений.

Аннотации
@SerialVersionUID()

object LinearSeq extends Delegate[LinearSeq]

Аннотации
@SerialVersionUID()

object List extends StrictOptimizedSeqFactory[List]

Этот объект предоставляет набор операций для создания List значений.

Аннотации
@SerialVersionUID()

object ListMap extends MapFactory[ListMap]

Этот объект предоставляет набор операций для создания значений ListMap.

Обратите внимание, что вставка каждого элемента занимает время O(n), что означает, что создание карты списка с n элементами займет время O(n2). Это делает билдер подходящим только для небольшого числа элементов.

Аннотации
@SerialVersionUID()
С

1

См. также

"Обзор библиотеки коллекций Scala" раздел по List Maps для получения дополнительной информации.

объект ListSet extends IterableFactory[ListSet]

Этот объект предоставляет набор операций для создания значений ListSet.

Обратите внимание, что вставка каждого элемента занимает время O(n), что означает, что создание набора списков с n элементами займет время O(n2). Это делает билдер подходящим только для небольшого числа элементов.

Аннотации
@SerialVersionUID()
С момента

1

объект LongMap extends java.io.Serializable

объект Map extends MapFactory[Map]

Этот объект предоставляет набор операций для создания immutable.Map значений.

Аннотации
@SerialVersionUID()

объект Nil extends List[Nothing] with Product with Serializable

объект NumericRange extends java.io.Serializable

объект Queue extends StrictOptimizedSeqFactory[Queue]

Этот объект предоставляет набор операций для создания immutable.Queue значений.

Аннотации
@SerialVersionUID()

объект Range extends java.io.Serializable

объект Seq extends Delegate[Seq]

Этот объект предоставляет набор операций для создания immutable.Seq значений.

Аннотации
@SerialVersionUID()

объект SeqMap extends MapFactory[SeqMap]

объект Set extends IterableFactory[Set]

Этот объект предоставляет набор операций для создания immutable.Set значений.

Аннотации
@SerialVersionUID()

объект SortedMap extends Delegate[SortedMap]

Аннотации
@SerialVersionUID()

объект SortedSet extends Delegate[SortedSet]

Этот объект предоставляет набор операций для создания immutable.SortedSet значений.

Аннотации
@SerialVersionUID()

объект TreeMap extends SortedMapFactory[TreeMap]

Этот объект предоставляет набор операций для создания значений immutable.TreeMap.

Аннотации
@SerialVersionUID()

объект TreeSeqMap extends MapFactory[TreeSeqMap]

объект TreeSet extends SortedIterableFactory[TreeSet]

Этот объект предоставляет набор операций для создания immutable.TreeSet значений.

Аннотации
@SerialVersionUID()

объект Vector extends StrictOptimizedSeqFactory[Vector]

Этот объект предоставляет набор операций для создания Vector значений.

Аннотации
@SerialVersionUID()

объект VectorMap extends MapFactory[VectorMap]

объект WrappedString extends SpecificIterableFactory[Char, WrappedString] with java.io.Serializable

Компаньон-объект для обернутых строк.

Аннотации
@SerialVersionUID()
С

2.8

© 2002-2019 EPFL, with contributions from Lightbend.
Licensed under the Apache License, Version 2.0.
https://www.scala-lang.org/api/2.13.0/scala/collection/immutable/index.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API