当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Scala immutable.List用法及代码示例


用法 一

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元素的有序集合的不可变链表类.

这个类带有两个实现案例类scala.Nilscala.::,它们实现了抽象成员isEmptyheadtail

此类最适合 last-in-first-out (LIFO)、stack-like 访问模式。如果您需要其他访问模式,例如随机访问或 FIFO,请考虑使用比 List 更适合此的集合。

性能

时间: ListO(1)前置和头部/尾部访问。大多数其他操作是O(n)关于列表中元素的数量。这包括基于索引的元素查找,length,appendreverse.

空间: List实现结构共享的尾列表。这意味着许多操作或者是零成本,或者是 constant-memory 成本。

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

也可以看看:

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

注意:

函数列表具有持久化和结构共享的特点,如果使用得当,在某些场景下可以提供可观的性能和空间消耗优势。但是,请注意,对同一函数列表具有多个引用的对象(即依赖结构共享的对象)将使用多个列表进行序列化和反序列化,每个列表对应一个引用。 IE。序列化/反序列化后结构共享丢失。

例子:

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

伴生:

object

源码:

List.scala

用法 二

object List extends StrictOptimizedSeqFactory[List]

此对象提供一组操作来创建 List.

伴生:

class

源码:

List.scala

相关用法


注:本文由纯净天空筛选整理自scala-lang.org大神的英文原创作品 immutable.List。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。