Scala Standard Library2.12.21 < 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.collection.parallel.immutable` - Immutable, parallel data-structures such as `ParVector`, `ParRange`, `ParHashMap` or `ParHashSet`
    - `scala.collection.parallel.mutable` - Mutable, parallel data-structures such as `ParArray`, `ParHashMap`, `ParTrieMap` or `ParHashSet`
  - `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.swing` - A convenient wrapper around Java's GUI framework called Swing (scala-swing.jar)
  - `scala.util.parsing` - Parser combinators (scala-parser-combinators.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

  Contains the base traits and objects needed to use and extend Scala's collection library.

  Contains the base traits and objects needed to use and extend Scala's collection library.

  #### Guide

  A detailed guide for using the collections library is available at http://docs.scala-lang.org/overviews/collections/introduction.html. Developers looking to extend the collections library can find a description of its architecture at http://docs.scala-lang.org/overviews/core/architecture-of-scala-collections.html.

  #### Using Collections

  It is convenient to treat all collections as either a scala.collection.Traversable or scala.collection.Iterable, as these traits define the vast majority of operations on a collection.

  Collections can, of course, be treated as specifically as needed, and the library is designed to ensure that the methods that transform collections will return a collection of the same type:

      scala> val array = Array(1,2,3,4,5,6)
      array: Array[Int] = Array(1, 2, 3, 4, 5, 6)

      scala> array map { _.toString }
      res0: Array[String] = Array(1, 2, 3, 4, 5, 6)

      scala> val list = List(1,2,3,4,5,6)
      list: List[Int] = List(1, 2, 3, 4, 5, 6)

      scala> list map { _.toString }
      res1: List[String] = List(1, 2, 3, 4, 5, 6)

  #### Creating Collections

  The most common way to create a collection is to use its companion object as a factory. The three most commonly used collections are scala.collection.Seq, scala.collection.immutable.Set, and scala.collection.immutable.Map. They can be used directly as shown below since their companion objects are all available as type aliases in either the scala package or in `scala.Predef`. New collections are created like this:

      scala> val seq = Seq(1,2,3,4,1)
      seq: Seq[Int] = List(1, 2, 3, 4, 1)

      scala> val set = Set(1,2,3,4,1)
      set: scala.collection.immutable.Set[Int] = Set(1, 2, 3, 4)

      scala> val map = Map(1 -> "one", 2 -> "two", 3 -> "three", 2 -> "too")
      map: scala.collection.immutable.Map[Int,String] = Map(1 -> one, 2 -> too, 3 -> three)

  It is also typical to prefer the scala.collection.immutable collections over those in scala.collection.mutable; the types aliased in the `scala.Predef` object are the immutable versions.

  Also note that the collections library was carefully designed to include several implementations of each of the three basic collection types. These implementations have specific performance characteristics which are described in the guide.

  The concrete parallel collections also have specific performance characteristics which are described in the parallel collections guide

  ##### Converting to and from Java Collections

  The scala.collection.JavaConverters object provides a collection of decorators that allow converting between Scala and Java collections using `asScala` and `asJava` methods.

  Definition Classes
    scala
-  package parallel

  Package object for parallel collections.

  Package object for parallel collections.

  Definition Classes
    collection
-  package immutable
  Definition Classes
    parallel
-  package mutable
  Definition Classes
    parallel
- LazyCombiner
- ParArray
- ParFlatHashTable
- ParHashMap
- ParHashSet
- ParHashTable
- ParIterable
- ParMap
- ParMapLike
- ParSeq
- ParSet
- ParSetLike
- ParTrieMap
- ResizableParArrayCombiner
- UnrolledParArrayCombiner

p

scala.collection.parallel

# mutable 

#### package mutable

Source
  package.scala

Linear Supertypes
AnyRef, Any
 
Ordering

1. Alphabetic
2. By Inheritance

Inherited

1. mutable
2. AnyRef
3. Any

1. Hide All
2. Show All

Visibility

1. Public
2. All

### Type Members

1.  trait LazyCombiner[Elem, +To, Buff <: Growable[Elem] with Sizing] extends Combiner[Elem, To]

   Implements combining contents of two combiners by postponing the operation until `result` method is called.

   Implements combining contents of two combiners by postponing the operation until `result` method is called. It chains the leaf results together instead of evaluating the actual collection.

   Elem

     the type of the elements in the combiner

   To

     the type of the collection the combiner produces

   Buff

     the type of the buffers that contain leaf results and this combiner chains together

2.  class ParArray[T] extends ParSeq[T] with GenericParTemplate[T, ParArray] with ParSeqLike[T, ParArray[T], ArraySeq[T]] with Serializable

   Parallel sequence holding elements in a linear array.

   Parallel sequence holding elements in a linear array.

   `ParArray` is a parallel sequence with a predefined size. The size of the array cannot be changed after it's been created.

   `ParArray` internally keeps an array containing the elements. This means that bulk operations based on traversal ensure fast access to elements. `ParArray` uses lazy builders that create the internal data array only after the size of the array is known. In the meantime, they keep the result set fragmented. The fragments are copied into the resulting data array in parallel using fast array copy operations once all the combiners are populated in parallel.

   T

     type of the elements in the array

   Annotations
     @SerialVersionUID()
   Since

     2.9

   See also

     Scala's Parallel Collections Library overview section on `ParArray` for more information.

3.  type ParArrayCombiner[T] = ResizableParArrayCombiner[T]
4.  trait ParFlatHashTable[T] extends FlatHashTable[T]

   Parallel flat hash table.

   Parallel flat hash table.

   T

     type of the elements in the table.

5.  class ParHashMap[K, V] extends ParMap[K, V] with GenericParMapTemplate[K, V, ParHashMap] with ParMapLike[K, V, ParHashMap[K, V], HashMap[K, V]] with ParHashTable[K, DefaultEntry[K, V]] with Serializable

   A parallel hash map.

   A parallel hash map.

   `ParHashMap` is a parallel map which internally keeps elements within a hash table. It uses chaining to resolve collisions.

   K

     type of the keys in the parallel hash map

   V

     type of the values in the parallel hash map

   Annotations
     @SerialVersionUID()
6.  class ParHashSet[T] extends ParSet[T] with GenericParTemplate[T, ParHashSet] with ParSetLike[T, ParHashSet[T], HashSet[T]] with ParFlatHashTable[T] with Serializable

   A parallel hash set.

   A parallel hash set.

   `ParHashSet` is a parallel set which internally keeps elements within a hash table. It uses linear probing to resolve collisions.

   T

     type of the elements in the parallel hash set .

   Annotations
     @SerialVersionUID()
7.  trait ParHashTable[K, Entry >: Null <: HashEntry[K, Entry]] extends HashTable[K, Entry]

   Provides functionality for hash tables with linked list buckets, enriching the data structure by fulfilling certain requirements for their parallel construction and iteration.

8.  trait ParIterable[T] extends GenIterable[T] with parallel.ParIterable[T] with GenericParTemplate[T, ParIterable] with ParIterableLike[T, ParIterable[T], Iterable[T]] with Mutable

   A template trait for mutable parallel iterable collections.

   A template trait for mutable parallel iterable collections.

   This is a base trait for Scala parallel collections. It defines behaviour common to all parallel collections. Concrete parallel collections should inherit this trait and `ParIterable` if they want to define specific combiner factories.

   Parallel operations are implemented with divide and conquer style algorithms that parallelize well. The basic idea is to split the collection into smaller parts until they are small enough to be operated on sequentially.

   All of the parallel operations are implemented as tasks within this trait. Tasks rely on the concept of splitters, which extend iterators. Every parallel collection defines:

       def splitter: IterableSplitter[T]

   which returns an instance of `IterableSplitter[T]`, which is a subtype of `Splitter[T]`. Splitters have a method `remaining` to check the remaining number of elements, and method `split` which is defined by splitters. Method `split` divides the splitters iterate over into disjunct subsets:

       def split: Seq[Splitter]

   which splits the splitter into a sequence of disjunct subsplitters. This is typically a very fast operation which simply creates wrappers around the receiver collection. This can be repeated recursively.

   Tasks are scheduled for execution through a scala.collection.parallel.TaskSupport object, which can be changed through the `tasksupport` setter of the collection.

   Method `newCombiner` produces a new combiner. Combiners are an extension of builders. They provide a method `combine` which combines two combiners and returns a combiner containing elements of both combiners. This method can be implemented by aggressively copying all the elements into the new combiner or by lazily binding their results. It is recommended to avoid copying all of the elements for performance reasons, although that cost might be negligible depending on the use case. Standard parallel collection combiners avoid copying when merging results, relying either on a two-step lazy construction or specific data-structure properties.

   Methods:

       def seq: Sequential
       def par: Repr

   produce the sequential or parallel implementation of the collection, respectively. Method `par` just returns a reference to this parallel collection. Method `seq` is efficient - it will not copy the elements. Instead, it will create a sequential version of the collection using the same underlying data structure. Note that this is not the case for sequential collections in general - they may copy the elements and produce a different underlying data structure.

   The combination of methods `toMap`, `toSeq` or `toSet` along with `par` and `seq` is a flexible way to change between different collection types.

   Since this trait extends the `GenIterable` trait, methods like `size` must also be implemented in concrete collections, while `iterator` forwards to `splitter` by default.

   Each parallel collection is bound to a specific fork/join pool, on which dormant worker threads are kept. The fork/join pool contains other information such as the parallelism level, that is, the number of processors used. When a collection is created, it is assigned the default fork/join pool found in the `scala.parallel` package object.

   Parallel collections are not necessarily ordered in terms of the `foreach` operation (see `Traversable`). Parallel sequences have a well defined order for iterators - creating an iterator and traversing the elements linearly will always yield the same order. However, bulk operations such as `foreach`, `map` or `filter` always occur in undefined orders for all parallel collections.

   Existing parallel collection implementations provide strict parallel iterators. Strict parallel iterators are aware of the number of elements they have yet to traverse. It's also possible to provide non-strict parallel iterators, which do not know the number of elements remaining. To do this, the new collection implementation must override `isStrictSplitterCollection` to `false`. This will make some operations unavailable.

   To create a new parallel collection, extend the `ParIterable` trait, and implement `size`, `splitter`, `newCombiner` and `seq`. Having an implicit combiner factory requires extending this trait in addition, as well as providing a companion object, as with regular collections.

   Method `size` is implemented as a constant time operation for parallel collections, and parallel collection operations rely on this assumption.

   The higher-order functions passed to certain operations may contain side-effects. Since implementations of bulk operations may not be sequential, this means that side-effects may not be predictable and may produce data-races, deadlocks or invalidation of state if care is not taken. It is up to the programmer to either avoid using side-effects or to use some form of synchronization when accessing mutable data.

   T

     the element type of the collection

   Since

     2.9

9.  trait ParMap[K, V] extends GenMap[K, V] with parallel.ParMap[K, V] with ParIterable[(K, V)] with GenericParMapTemplate[K, V, ParMap] with ParMapLike[K, V, ParMap[K, V], mutable.Map[K, V]]

   A template trait for mutable parallel maps.

   A template trait for mutable parallel maps.

   The higher-order functions passed to certain operations may contain side-effects. Since implementations of bulk operations may not be sequential, this means that side-effects may not be predictable and may produce data-races, deadlocks or invalidation of state if care is not taken. It is up to the programmer to either avoid using side-effects or to use some form of synchronization when accessing mutable data.

   K

     the key type of the map

   V

     the value type of the map

   Since

     2.9

10.  trait ParMapLike[K, V, +Repr <: ParMapLike[K, V, Repr, Sequential] with ParMap[K, V], +Sequential <: mutable.Map[K, V] with mutable.MapLike[K, V, Sequential]] extends GenMapLike[K, V, Repr] with parallel.ParMapLike[K, V, Repr, Sequential] with Growable[(K, V)] with Shrinkable[K] with mutable.Cloneable[Repr]

    A template trait for mutable parallel maps.

    A template trait for mutable parallel maps. This trait is to be mixed in with concrete parallel maps to override the representation type.

    The higher-order functions passed to certain operations may contain side-effects. Since implementations of bulk operations may not be sequential, this means that side-effects may not be predictable and may produce data-races, deadlocks or invalidation of state if care is not taken. It is up to the programmer to either avoid using side-effects or to use some form of synchronization when accessing mutable data.

    K

      the key type of the map

    V

      the value type of the map

11.  trait ParSeq[T] extends GenSeq[T] with ParIterable[T] with parallel.ParSeq[T] with GenericParTemplate[T, ParSeq] with ParSeqLike[T, ParSeq[T], mutable.Seq[T]]

    A mutable variant of `ParSeq`.

12.  trait ParSet[T] extends GenSet[T] with ParIterable[T] with parallel.ParSet[T] with GenericParTemplate[T, ParSet] with ParSetLike[T, ParSet[T], mutable.Set[T]]

    A mutable variant of `ParSet`.

13.  trait ParSetLike[T, +Repr <: ParSetLike[T, Repr, Sequential] with ParSet[T], +Sequential <: mutable.Set[T] with mutable.SetLike[T, Sequential]] extends GenSetLike[T, Repr] with ParIterableLike[T, Repr, Sequential] with parallel.ParSetLike[T, Repr, Sequential] with Growable[T] with Shrinkable[T] with mutable.Cloneable[Repr]

    A template trait for mutable parallel sets.

    A template trait for mutable parallel sets. This trait is mixed in with concrete parallel sets to override the representation type.

    The higher-order functions passed to certain operations may contain side-effects. Since implementations of bulk operations may not be sequential, this means that side-effects may not be predictable and may produce data-races, deadlocks or invalidation of state if care is not taken. It is up to the programmer to either avoid using side-effects or to use some form of synchronization when accessing mutable data.

    T

      the element type of the set

14.  final class ParTrieMap[K, V] extends ParMap[K, V] with GenericParMapTemplate[K, V, ParTrieMap] with ParMapLike[K, V, ParTrieMap[K, V], TrieMap[K, V]] with ParTrieMapCombiner[K, V] with Serializable

    Parallel TrieMap collection.

    Parallel TrieMap collection.

    It has its bulk operations parallelized, but uses the snapshot operation to create the splitter. This means that parallel bulk operations can be called concurrently with the modifications.

    Since

      2.10

    See also

      Scala's Parallel Collections Library overview section on `ParTrieMap` for more information.

15.  trait ResizableParArrayCombiner[T] extends LazyCombiner[T, ParArray[T], ExposedArrayBuffer[T]]

    An array combiner that uses a chain of arraybuffers to store elements.

16.  trait UnrolledParArrayCombiner[T] extends Combiner[T, ParArray[T]]

    An array combiner that uses doubling unrolled buffers to store elements.

### Value Members

1.  val ParArrayCombiner: ResizableParArrayCombiner.type
2.  object ParArray extends ParFactory[ParArray] with Serializable

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

3.  object ParHashMap extends ParMapFactory[ParHashMap] with Serializable

   This object provides a set of operations needed to create ``mutable.ParHashMap`` values.

4.  object ParHashSet extends ParSetFactory[ParHashSet] with Serializable

   This object provides a set of operations needed to create ``mutable.ParHashSet`` values.

5.  object ParIterable extends ParFactory[ParIterable]

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

6.  object ParMap extends ParMapFactory[ParMap]
7.  object ParSeq extends ParFactory[ParSeq]

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

8.  object ParSet extends ParSetFactory[ParSet]

   This object provides a set of operations needed to create ``mutable.ParSet`` values.

9.  object ParTrieMap extends ParMapFactory[ParTrieMap] with Serializable
10.  object ResizableParArrayCombiner
11.  object UnrolledParArrayCombiner

### Inherited from AnyRef

### Inherited from Any

### Ungrouped