Scala Standard Library2.13.17 < Back


# Packages

-  package root

  This is the documentation for the Scala standard library.

  This is the documentation for the Scala standard library.

  #### Package structure

  The scala package contains core types like `Int`, `Float`, `Array` or `Option` which are accessible in all Scala compilation units without explicit qualification or imports.

  Notable packages include:

  - `scala.collection` and its sub-packages contain Scala's collections framework
    - `scala.collection.immutable` - Immutable, sequential data-structures such as `Vector`, `List`, `Range`, `HashMap` or `HashSet`
    - `scala.collection.mutable` - Mutable, sequential data-structures such as `ArrayBuffer`, `StringBuilder`, `HashMap` or `HashSet`
    - `scala.collection.concurrent` - Mutable, concurrent data-structures such as `TrieMap`
  - `scala.concurrent` - Primitives for concurrent programming such as `Futures` and `Promises`
  - `scala.io` - Input and output operations
  - `scala.math` - Basic math functions and additional numeric types like `BigInt` and `BigDecimal`
  - `scala.sys` - Interaction with other processes and the operating system
  - `scala.util.matching` - Regular expressions

  Other packages exist. See the complete list on the right.

  Additional parts of the standard library are shipped as separate libraries. These include:

  - `scala.reflect` - Scala's reflection API (scala-reflect.jar)
  - `scala.xml` - XML parsing, manipulation, and serialization (scala-xml.jar)
  - `scala.collection.parallel` - Parallel collections (scala-parallel-collections.jar)
  - `scala.util.parsing` - Parser combinators (scala-parser-combinators.jar)
  - `scala.swing` - A convenient wrapper around Java's GUI framework called Swing (scala-swing.jar)

  #### Automatic imports

  Identifiers in the scala package and the `scala.Predef` object are always in scope by default.

  Some of these identifiers are type aliases provided as shortcuts to commonly used classes. For example, `List` is an alias for `scala.collection.immutable.List`.

  Other aliases refer to classes provided by the underlying platform. For example, on the JVM, `String` is an alias for `java.lang.String`.

  Definition Classes
    root
-  package scala

  Core Scala types.

  Core Scala types. They are always available without an explicit import.

  Definition Classes
    root
-  package collection
  Definition Classes
    scala
-  package concurrent
  Definition Classes
    collection
-  package convert
  Definition Classes
    collection
-  package generic
  Definition Classes
    collection
-  package immutable
  Definition Classes
    collection
- ::
- AbstractMap
- AbstractSeq
- AbstractSet
- ArraySeq
- BitSet
- HashMap
- HashSet
- IndexedSeq
- IndexedSeqDefaults
- IndexedSeqOps
- IntMap
- Iterable
- LazyList
- LinearSeq
- LinearSeqOps
- List
- ListMap
- ListSet
- LongMap
- Map
- MapOps
- Nil
- NumericRange
- Queue
- Range
- Seq
- SeqMap
- SeqOps
- Set
- SetOps
- SortedMap
- SortedMapOps
- SortedSet
- SortedSetOps
- Stream
- StrictOptimizedMapOps
- StrictOptimizedSeqOps
- StrictOptimizedSetOps
- StrictOptimizedSortedMapOps
- StrictOptimizedSortedSetOps
- TreeMap
- TreeSeqMap
- TreeSet
- Vector
- VectorBuilder
- VectorMap
- WrappedString
-  package mutable
  Definition Classes
    collection

p

scala.collection

# immutable

#### package immutable

Source
  package.scala

Linear Supertypes
AnyRef, Any
Content Hierarchy

Ordering

1. Alphabetic
2. By Inheritance

Inherited

1. immutable
2. AnyRef
3. Any

1. Hide All
2. Show All

Visibility

1. Public
2. Protected

### Type Members

1.  final case class ::[+A](head: A, next: List[A]) extends List[A] with Product with Serializable
2.  abstract class AbstractMap[K, +V] extends collection.AbstractMap[K, V] with Map[K, V]

   Explicit instantiation of the `Map` trait to reduce class file size in subclasses.

3.  abstract class AbstractSeq[+A] extends collection.AbstractSeq[A] with Seq[A]

   Explicit instantiation of the `Seq` trait to reduce class file size in subclasses.

4.  abstract class AbstractSet[A] extends collection.AbstractSet[A] with Set[A]

   Explicit instantiation of the `Set` trait to reduce class file size in subclasses.

5.  sealed abstract class ArraySeq[+A] extends AbstractSeq[A] with IndexedSeq[A] with IndexedSeqOps[A, ArraySeq, ArraySeq[A]] with StrictOptimizedSeqOps[A, ArraySeq, ArraySeq[A]] with EvidenceIterableFactoryDefaults[A, ArraySeq, ClassTag] with Serializable

   An immutable array.

   An immutable array.

   Supports efficient indexed access and has a small memory footprint.

6.  sealed abstract class BitSet extends AbstractSet[Int] with SortedSet[Int] with SortedSetOps[Int, SortedSet, BitSet] with StrictOptimizedSortedSetOps[Int, SortedSet, BitSet] with collection.BitSet with BitSetOps[BitSet] with Serializable

   A class for immutable bitsets.

   A class for immutable bitsets.

   Bitsets are sets of non-negative integers which are represented as variable-size arrays of bits packed into 64-bit words. The lower bound of memory footprint of a bitset is determined by the largest number stored in it.

   See also

     "Scala's Collection Library overview" section on `Immutable BitSets` for more information.

7.  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

   This class implements immutable maps using a Compressed Hash-Array Mapped Prefix-tree.

   This class implements immutable maps using a Compressed Hash-Array Mapped Prefix-tree. See paper https://michael.steindorfer.name/publications/oopsla15.pdf for more details.

   K

     the type of the keys contained in this hash set.

   V

     the type of the values associated with the keys in this hash map.

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

   This class implements immutable sets using a Compressed Hash-Array Mapped Prefix-tree.

   This class implements immutable sets using a Compressed Hash-Array Mapped Prefix-tree. See paper https://michael.steindorfer.name/publications/oopsla15.pdf for more details.

   A

     the type of the elements contained in this hash set.

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

   Base trait for immutable indexed sequences that have efficient `apply` and `length`

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

    Base trait for immutable indexed Seq operations

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

    Specialised immutable map structure for integer keys, based on Fast Mergeable Integer Maps by Okasaki and Gill.

    Specialised immutable map structure for integer keys, based on Fast Mergeable Integer Maps by Okasaki and Gill. Essentially a trie based on binary digits of the integers.

    Note: This class is as of 2.8 largely superseded by HashMap.

    T

      type of the values associated with integer keys.

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

    A trait for collections that are guaranteed immutable.

    A trait for collections that are guaranteed immutable.

    A

      the element type of the collection

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

    This class implements an immutable linked list.

    This class implements an immutable linked list. We call it "lazy" because it computes its elements only when they are needed.

    Elements are memoized; that is, the value of each element is computed at most once.

    Elements are computed in order and are never skipped. As a consequence, accessing the tail causes the head to be computed first.

    How lazy is a `LazyList`? When you have a value of type `LazyList`, you don't know yet whether the list is empty. We say that it is lazy in its head. If you have tested that it is non-empty, then you also know that the head has been computed.

    It is also lazy in its tail, which is also a `LazyList`. You don't know whether the tail is empty until it is "forced", which is to say, until an element of the tail is computed.

    These important properties of `LazyList` depend on its construction using `#::` (or `#:::`). That operator is analogous to the "cons" of a strict `List`, `::`. It is "right-associative", so that the collection goes on the "right", and the element on the left of the operator is prepended to the collection. However, unlike the cons of a strict `List`, `#::` is lazy in its parameter, which is the element prepended to the left, and also lazy in its right-hand side, which is the `LazyList` being prepended to. (That is accomplished by implicitly wrapping the `LazyList`, as shown in the Scaladoc.)

    Other combinators from the collections API do not preserve this laziness. In particular, `++`, or `concat`, is "eager" or "strict" in its parameter and should not be used to compose `LazyList`s.

    A `LazyList` may be infinite. For example, `LazyList.from(0)` contains all of the natural numbers `0`, `1`, `2`, ... For infinite sequences, some methods (such as `count`, `sum`, `max` or `min`) will not terminate.

    Here is an example showing the Fibonacci sequence, which may be evaluated to an arbitrary number of elements:

        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)
          println {
            fibs.take(5).mkString(", ")
          }
        }
        // prints: 0, 1, 1, 2, 3

    To illustrate, let's add some output to the definition `fibs`, so we see what's going on.

        import scala.math.BigInt
        import scala.util.chaining._
        object Main extends App {
          val fibs: LazyList[BigInt] =
            BigInt(0) #:: BigInt(1) #::
              fibs.zip(fibs.tail).map(n => (n._1 + n._2)
              .tap(sum => println(s"Adding ${n._1} and ${n._2} => $sum")))
          fibs.take(5).foreach(println)
          fibs.take(6).foreach(println)
        }

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

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

    Note that the definition of `fibs` uses `val` not `def`. Memoization of the `LazyList` requires us to retain a reference to the computed values.

    `LazyList` is considered an immutable data structure, even though its elements are computed on demand. Once the values are memoized they do not change. Moreover, the `LazyList` itself is defined once and references to it are interchangeable. Values that have yet to be memoized still "exist"; they simply haven't been computed yet.

    Memoization can be a source of memory leaks and must be used with caution. It avoids recomputing elements of the list, but if a reference to the head is retained unintentionally, then all elements will be retained.

    The caveat that all elements are computed in order means that some operations, such as drop, dropWhile, flatMap or collect, may process a large number of intermediate elements before returning.

    Here's an example that illustrates these behaviors. Let's begin with an iteration of the natural numbers.

        // 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 we retain only a reference to its Iterator.
        // That allows the LazyList to be garbage collected.
        // Using `def` to produce the LazyList in a method ensures
        // that no val is holding onto the head, as 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)

    In the `fibs` example earlier, the fact that `tail` works at all is of interest. `fibs` has an initial `(0, 1, LazyList(...))`, so `tail` is deterministic. If we defined `fibs` such that only `0` were concretely known, then the act of determining `tail` would require the evaluation of `tail`, so the computation would be unable to progress, as in this code:

        // 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 }

    The definition of `fibs` above creates a larger number of objects than necessary depending on how you might want to implement it. The following implementation provides a more "cost effective" implementation due to the fact that it has a more direct route to the numbers themselves:

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

    The head, the tail and whether the list is empty is initially unknown. Once any of those are evaluated, they are all known, though if the tail is built with `#::` or `#:::`, its content still isn't evaluated. Instead, evaluating the tail's content is deferred until the tail's empty status, head or tail is evaluated.

    Delaying the evaluation of whether a LazyList is empty until it's needed allows LazyList to not eagerly evaluate any elements on a call to `filter`.

    Only when it's further evaluated (which may be never!) do any of the elements get forced.

    For example:

        def tailWithSideEffect: LazyList[Nothing] = {
          println("getting empty LazyList")
          LazyList.empty
        }

        val emptyTail = tailWithSideEffect // prints "getting empty LazyList"

        val suspended = 1 #:: tailWithSideEffect // doesn't print anything
        val tail = suspended.tail // although the tail is evaluated, *still* nothing is yet printed
        val filtered = tail.filter(_ => false) // still nothing is printed
        filtered.isEmpty // prints "getting empty LazyList"

    You may sometimes encounter an exception like the following:

        java.lang.RuntimeException: "LazyList evaluation depends on its own result (self-reference); see docs for more info

    This exception occurs when a `LazyList` is attempting to derive its next element from itself, and is attempting to read the element currently being evaluated. As a trivial example:

        lazy val a: LazyList[Int] = 1 #:: 2 #:: a.filter(_ > 2)

    When attempting to evaluate the third element of `a`, it will skip the first two elements and read the third, but that element is already being evaluated. This is often caused by a subtle logic error; in this case, using `>=` in the `filter` would fix the error.

    A

      the type of the elements contained in this lazy list.

    Annotations
      @SerialVersionUID()
    See also

      "Scala's Collection Library overview" section on `LazyLists` for a summary.

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

    Base trait for immutable linear sequences that have efficient `head` and `tail`

15.  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]
16.  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 class for immutable linked lists representing ordered collections of elements of type `A`.

    A class for immutable linked lists representing ordered collections of elements of type `A`.

    This class comes with two implementing case classes `scala.Nil` and `scala.::` that implement the abstract members `isEmpty`, `head` and `tail`.

    This class is optimal for last-in-first-out (LIFO), stack-like access patterns. If you need another access pattern, for example, random access or FIFO, consider using a collection more suited to this than `List`.

    #### Performance

    Time: `List` has `O(1)` prepend and head/tail access. Most other operations are `O(n)` on the number of elements in the list. This includes the index-based lookup of elements, `length`, `append` and `reverse`.

    Space: `List` implements structural sharing of the tail list. This means that many operations are either zero- or constant-memory cost.

        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

    Annotations
      @SerialVersionUID()
    Example:

    1.     // 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.")
           }

    Note

      The functional list is characterized by persistence and structural sharing, thus offering considerable performance and space consumption benefits in some scenarios if used correctly. However, note that objects having multiple references into the same functional list (that is, objects that rely on structural sharing), will be serialized and deserialized with multiple lists, one for each reference to it. I.e. structural sharing is lost after serialization/deserialization.

    See also

      "Scala's Collection Library overview" section on `Lists` for more information.

17.  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

    This class implements immutable maps using a list-based data structure.

    This class implements immutable maps using a list-based data structure. List map iterators and traversal methods visit key-value pairs in the order they were first inserted.

    Entries are stored internally in reversed insertion order, which means the newest key is at the head of the list. As such, methods such as `head` and `tail` are O(n), while `last` and `init` are O(1). Other operations, such as inserting or removing entries, are also O(n), which makes this collection suitable only for a small number of elements.

    Instances of `ListMap` represent empty maps; they can be either created by calling the constructor directly, or by applying the function `ListMap.empty`.

    K

      the type of the keys contained in this list map

    V

      the type of the values associated with the keys

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

    This class implements immutable sets using a list-based data structure.

    This class implements immutable sets using a list-based data structure. List set iterators and traversal methods visit elements in the order they were first inserted.

    Elements are stored internally in reversed insertion order, which means the newest element is at the head of the list. As such, methods such as `head` and `tail` are O(n), while `last` and `init` are O(1). Other operations, such as inserting or removing entries, are also O(n), which makes this collection suitable only for a small number of elements.

    Instances of `ListSet` represent empty sets; they can be either created by calling the constructor directly, or by applying the function `ListSet.empty`.

    A

      the type of the elements contained in this list set

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

    Specialised immutable map structure for long keys, based on Fast Mergeable Long Maps by Okasaki and Gill.

    Specialised immutable map structure for long keys, based on Fast Mergeable Long Maps by Okasaki and Gill. Essentially a trie based on binary digits of the integers.

    Note: This class is as of 2.8 largely superseded by HashMap.

    T

      type of the values associated with the long keys.

20.  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]

    Base type of immutable Maps

21.  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]

    Base trait of immutable Maps implementations

22.  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` is a more generic version of the `Range` class which works with arbitrary types.

    `NumericRange` is a more generic version of the `Range` class which works with arbitrary types. It must be supplied with an `Integral` implementation of the range type.

    Factories for likely types include `Range.BigInt`, `Range.Long`, and `Range.BigDecimal`. `Range.Int` exists for completeness, but the `Int`-based `scala.Range` should be more performant.

        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()
23.  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` objects implement data structures that allow to insert and retrieve elements in a first-in-first-out (FIFO) manner.

    `Queue` objects implement data structures that allow to insert and retrieve elements in a first-in-first-out (FIFO) manner.

    `Queue` is implemented as a pair of `List`s, one containing the in elements and the other the out elements. Elements are added to the in list and removed from the out list. When the out list runs dry, the queue is pivoted by replacing the out list by in.reverse, and in by Nil.

    Adding items to the queue always has cost `O(1)`. Removing items has cost `O(1)`, except in the case where a pivot is required, in which case, a cost of `O(n)` is incurred, where `n` is the number of elements in the queue. When this happens, `n` remove operations with `O(1)` cost are guaranteed. Removing an item is on average `O(1)`.

    See also

      "Scala's Collection Library overview" section on `Immutable Queues` for more information.

24.  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

    The `Range` class represents integer values in range [start;end) with non-zero step value `step`.

    The `Range` class represents integer values in range [start;end) with non-zero step value `step`. It's a special case of an indexed sequence. For example:

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

    Ranges that contain more than `Int.MaxValue` elements can be created, but these overfull ranges have only limited capabilities. Any method that could require a collection of over `Int.MaxValue` length to be created, or could be asked to index beyond `Int.MaxValue` elements will throw an exception. Overfull ranges can safely be reduced in size by changing the step size (e.g. `by 3`) or taking/dropping elements. `contains`, `equals`, and access to the ends of the range (`head`, `last`, `tail`, `init`) are also permitted on overfull ranges.

    Annotations
      @SerialVersionUID()
25.  trait Seq[+A] extends Iterable[A] with collection.Seq[A] with SeqOps[A, Seq, Seq[A]] with IterableFactoryDefaults[A, Seq]
26.  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]

    A base trait for ordered, immutable maps.

    A base trait for ordered, immutable maps.

    Note that the equals method for SeqMap compares key-value pairs without regard to ordering.

    All behavior is defined in terms of the abstract methods in `SeqMap`. It is sufficient for concrete subclasses to implement those methods. Methods that return a new map, in particular removed and updated, must preserve ordering.

    K

      the type of the keys contained in this linked map.

    V

      the type of the values associated with the keys in this linked map.

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

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

    Base trait for immutable set collections

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

    Base trait for immutable set operations

30.  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]

    An immutable map whose key-value pairs are sorted according to an scala.math.Ordering on the keys.

    An immutable map whose key-value pairs are sorted according to an scala.math.Ordering on the keys.

    Allows for range queries to be performed on its keys, and implementations must guarantee that traversal happens in sorted order, according to the map's scala.math.Ordering.

    K

      the type of the keys contained in this tree map.

    V

      the type of the values associated with the keys.

    Example:

    1.     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)

31.  trait SortedMapOps[K, +V, +CC[X, +Y] <: Map[X, Y] with SortedMapOps[X, Y, CC, _], +C <: SortedMapOps[K, V, CC, C]] extends MapOps[K, V, Map, C] with collection.SortedMapOps[K, V, CC, C]
32.  trait SortedSet[A] extends Set[A] with collection.SortedSet[A] with SortedSetOps[A, SortedSet, SortedSet[A]] with SortedSetFactoryDefaults[A, SortedSet, Set]

    Base trait for sorted sets

33.  trait SortedSetOps[A, +CC[X] <: SortedSet[X], +C <: SortedSetOps[A, CC, C]] extends SetOps[A, Set, C] with collection.SortedSetOps[A, CC, C]

34.  trait StrictOptimizedMapOps[K, +V, +CC[X, +Y] <: MapOps[X, Y, CC, _], +C <: MapOps[K, V, CC, C]] extends MapOps[K, V, CC, C] with collection.StrictOptimizedMapOps[K, V, CC, C] with StrictOptimizedIterableOps[(K, V), Iterable, C]
35.  trait StrictOptimizedSeqOps[+A, +CC[_], +C] extends SeqOps[A, CC, C] with collection.StrictOptimizedSeqOps[A, CC, C] with StrictOptimizedIterableOps[A, CC, C]

    Trait that overrides operations to take advantage of strict builders.

36.  trait 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]
37.  trait 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]
38.  trait 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]
39.  type StringOps = collection.StringOps
40.  type StringView = collection.StringView
41.  final class 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

    An immutable SortedMap whose values are stored in a red-black tree.

    An immutable SortedMap whose values are stored in a red-black tree.

    This class is optimal when range queries will be performed, or when traversal in order of an ordering is desired. If you only need key lookups, and don't care in which order key-values are traversed in, consider using * scala.collection.immutable.HashMap, which will generally have better performance. If you need insertion order, consider a * scala.collection.immutable.SeqMap, which does not need to have an ordering supplied.

    K

      the type of the keys contained in this tree map.

    V

      the type of the values associated with the keys.

    Example:

    1.     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)

    See also

      "Scala's Collection Library overview" section on `Red-Black Trees` for more information.

42.  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]

    This class implements an immutable map that preserves order using a hash map for the key to value mapping to provide efficient lookup, and a tree for the ordering of the keys to provide efficient insertion/modification order traversal and destructuring.

    This class implements an immutable map that preserves order using a hash map for the key to value mapping to provide efficient lookup, and a tree for the ordering of the keys to provide efficient insertion/modification order traversal and destructuring.

    By default insertion order (`TreeSeqMap.OrderBy.Insertion`) is used, but modification order (`TreeSeqMap.OrderBy.Modification`) can be used instead if so specified at creation.

    The `orderingBy(orderBy: TreeSeqMap.OrderBy): TreeSeqMap[K, V]` method can be used to switch to the specified ordering for the returned map.

    A key can be manually refreshed (i.e. placed at the end) via the `refresh(key: K): TreeSeqMap[K, V]` method (regardless of the ordering in use).

    Internally, an ordinal counter is increased for each insertion/modification and then the current ordinal is used as key in the tree map. After 232 insertions/modifications the entire map is copied (thus resetting the ordinal counter).

    K

      the type of the keys contained in this map.

    V

      the type of the values associated with the keys in this map.

43.  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

    This class implements immutable sorted sets using a tree.

    This class implements immutable sorted sets using a tree.

    A

      the type of the elements contained in this tree set

    See also

      "Scala's Collection Library overview" section on `Red-Black Trees` for more information.

44.  sealed abstract 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 DefaultSerializable

    Vector is a general-purpose, immutable data structure.

    Vector is a general-purpose, immutable data structure. It provides random access and updates in O(log n) time, as well as very fast append/prepend/tail/init (amortized O(1), worst case O(log n)). Because vectors strike a good balance between fast random selections and fast random functional updates, they are currently the default implementation of immutable indexed sequences.

    Vectors are implemented by radix-balanced finger trees of width 32. There is a separate subclass for each level (0 to 6, with 0 being the empty vector and 6 a tree with a maximum width of 64 at the top level).

    Tree balancing: - Only the first dimension of an array may have a size < WIDTH - In a `data` (central) array the first dimension may be up to WIDTH-2 long, in `prefix1` and `suffix1` up to WIDTH, and in other `prefix` and `suffix` arrays up to WIDTH-1 - `prefix1` and `suffix1` are never empty - Balancing does not cross the main data array (i.e. prepending never touches the suffix and appending never touches the prefix). The level is increased/decreased when the affected side plus main data is already full/empty - All arrays are left-aligned and truncated

    In addition to the data slices (`prefix1`, `prefix2`, ..., `dataN`, ..., `suffix2`, `suffix1`) we store a running count of elements after each prefix for more efficient indexing without having to dereference all prefix arrays.

45.  final class VectorBuilder[A] extends ReusableBuilder[A, Vector[A]]
46.  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]

    This class implements immutable maps using a vector/map-based data structure, which preserves insertion order.

    This class implements immutable maps using a vector/map-based data structure, which preserves insertion order.

    Unlike `ListMap`, `VectorMap` has amortized effectively constant lookup at the expense of using extra memory and generally lower performance for other operations

    K

      the type of the keys contained in this vector map.

    V

      the type of the values associated with the keys in this vector map.

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

    This class serves as a wrapper augmenting `String`s with all the operations found in indexed sequences.

    This class serves as a wrapper augmenting `String`s with all the operations found in indexed sequences.

    The difference between this class and `StringOps` is that calling transformer methods such as `filter` and `map` will yield an object of type `WrappedString` rather than a `String`.

    Annotations
      @SerialVersionUID()

### Deprecated Type Members

1.  type DefaultMap[K, +V] = Map[K, V]
   Annotations
     @deprecated
   Deprecated

     (Since version 2.13.0) Use Map instead of DefaultMap

2.  sealed abstract class Stream[+A] extends AbstractSeq[A] with LinearSeq[A] with LinearSeqOps[A, Stream, Stream[A]] with IterableFactoryDefaults[A, Stream] with Serializable
   Annotations
     @deprecated @SerialVersionUID()
   Deprecated

     (Since version 2.13.0) Use LazyList (which is fully lazy) instead of Stream (which has a lazy tail only)

3.  type Traversable[+X] = Iterable[X]
   Annotations
     @deprecated
   Deprecated

     (Since version 2.13.0) Use Iterable instead of Traversable

### Value Members

1.  val StringOps: collection.StringOps.type
2.  val StringView: collection.StringView.type
3.  object ArraySeq extends StrictOptimizedClassTagSeqFactory[ArraySeq]

   This object provides a set of operations to create `ArraySeq` values.

   This object provides a set of operations to create `ArraySeq` values.

   Annotations
     @SerialVersionUID()
4.  object BitSet extends SpecificIterableFactory[Int, BitSet] with java.io.Serializable

   This object provides a set of operations to create `immutable.BitSet` values.

   This object provides a set of operations to create `immutable.BitSet` values.

   Annotations
     @nowarn() @SerialVersionUID()
5.  object HashMap extends MapFactory[HashMap]

   This object provides a set of operations to create `immutable.HashMap` values.

   This object provides a set of operations to create `immutable.HashMap` values.

   Annotations
     @SerialVersionUID()
6.  object HashSet extends IterableFactory[HashSet]

   This object provides a set of operations to create `immutable.HashSet` values.

   This object provides a set of operations to create `immutable.HashSet` values.

   Annotations
     @SerialVersionUID()
7.  object IndexedSeq extends Delegate[IndexedSeq]
   Annotations
     @SerialVersionUID()
8.  object IndexedSeqDefaults
9.  object IntMap extends java.io.Serializable

   A companion object for integer maps.

10.  object Iterable extends Delegate[Iterable]
    Annotations
      @SerialVersionUID()
11.  object LazyList extends SeqFactory[LazyList]

    This object provides a set of operations to create `LazyList` values.

    This object provides a set of operations to create `LazyList` values.

    Annotations
      @SerialVersionUID()
12.  object LinearSeq extends Delegate[LinearSeq]
    Annotations
      @SerialVersionUID()
13.  object List extends StrictOptimizedSeqFactory[List]

    This object provides a set of operations to create `List` values.

    This object provides a set of operations to create `List` values.

    Annotations
      @SerialVersionUID()
14.  object ListMap extends MapFactory[ListMap]

    This object provides a set of operations to create ListMap values.

    This object provides a set of operations to create ListMap values.

    Note that each element insertion takes O(n) time, which means that creating a list map with n elements will take O(n2) time. This makes the builder suitable only for a small number of elements.

    Annotations
      @SerialVersionUID()
    See also

      "Scala's Collection Library overview" section on `List Maps` for more information.

15.  object ListSet extends IterableFactory[ListSet]

    This object provides a set of operations to create ListSet values.

    This object provides a set of operations to create ListSet values.

    Note that each element insertion takes O(n) time, which means that creating a list set with n elements will take O(n2) time. This makes the builder suitable only for a small number of elements.

    Annotations
      @SerialVersionUID()
16.  object LongMap extends java.io.Serializable

    A companion object for long maps.

17.  object Map extends MapFactory[Map]

    This object provides a set of operations to create `immutable.Map` values.

    This object provides a set of operations to create `immutable.Map` values.

    Annotations
      @SerialVersionUID()
18.  case object Nil extends List[Nothing] with Product with Serializable
19.  object NumericRange extends java.io.Serializable

    A companion object for numeric ranges.

20.  object Queue extends StrictOptimizedSeqFactory[Queue]

    This object provides a set of operations to create `immutable.Queue` values.

    This object provides a set of operations to create `immutable.Queue` values.

    Annotations
      @SerialVersionUID()
21.  object Range extends java.io.Serializable

    Companion object for ranges.

22.  object Seq extends Delegate[Seq]

    This object provides a set of operations to create `immutable.Seq` values.

    This object provides a set of operations to create `immutable.Seq` values.

    Annotations
      @SerialVersionUID()
23.  object SeqMap extends MapFactory[SeqMap]
24.  object Set extends IterableFactory[Set]

    This object provides a set of operations to create `immutable.Set` values.

    This object provides a set of operations to create `immutable.Set` values.

    Annotations
      @SerialVersionUID()
25.  object SortedMap extends Delegate[SortedMap]
    Annotations
      @SerialVersionUID()
26.  object SortedSet extends Delegate[SortedSet]

    This object provides a set of operations to create `immutable.SortedSet` values.

    This object provides a set of operations to create `immutable.SortedSet` values.

    Annotations
      @SerialVersionUID()
27.  object TreeMap extends SortedMapFactory[TreeMap]

    This object provides a set of operations to create immutable.TreeMap values.

    This object provides a set of operations to create immutable.TreeMap values.

    Annotations
      @SerialVersionUID()
28.  object TreeSeqMap extends MapFactory[TreeSeqMap]
29.  object TreeSet extends SortedIterableFactory[TreeSet]

    This object provides a set of operations to create `immutable.TreeSet` values.

    This object provides a set of operations to create `immutable.TreeSet` values.

    Annotations
      @SerialVersionUID()
30.  object Vector extends StrictOptimizedSeqFactory[Vector]

    This object provides a set of operations to create `immutable.Seq` values.

    This object provides a set of operations to create `immutable.Seq` values.

    Annotations
      @SerialVersionUID()
31.  object VectorMap extends MapFactory[VectorMap]
32.  object WrappedString extends SpecificIterableFactory[Char, WrappedString] with java.io.Serializable

    A companion object for wrapped strings.

    A companion object for wrapped strings.

    Annotations
      @SerialVersionUID()

### Deprecated Value Members

1.  val Traversable: Iterable.type
   Annotations
     @deprecated
   Deprecated

     (Since version 2.13.0) Use Iterable instead of Traversable

2.  object Stream extends SeqFactory[Stream]
   Annotations
     @deprecated @SerialVersionUID()
   Deprecated

     (Since version 2.13.0) Use LazyList (which is fully lazy) instead of Stream (which has a lazy tail only)

### Inherited from AnyRef

### Inherited from Any

### Ungrouped