Scala 集合深度解析
1. 缓存函数的实现
在 Scala 中,我们可以实现一个缓存函数,避免重复计算。以下是一个示例:
def cachedF(s: String) = cache.getOrElseUpdate(s, f(s))
这里 getOrElseUpdate
的第二个参数是按名调用的,只有在缓存中找不到对应键时才会计算 f(s)
。也可以使用基本的映射操作直接实现 cachedF
:
def cachedF(arg: String) = cache get arg match {
case Some(result) => result
case None =>
val result = f(arg)
cache(arg) = result
result
}
2. 具体的不可变集合类
Scala 提供了多种不可变集合类,下面介绍一些常见的类型。
2.1 列表(Lists)
列表是有限的不可变序列,访问头部元素和添加元素到头部的操作时间复杂度为常数,其他操作通常为线性时间。
2.2 流(Streams)
流与列表类似,但元素是惰性计算的,因此可以是无限长的。流使用 #::
操作符构建,例如: