Scala 集合(三)

Scala 集合选择

除了决定使用可变集合还是不可变集合,并行集合或非并行集合,在给定的场景下,你还需要决定究竟应该选择什么集合类型?

当可能同时有可变和不可变两种选择时,我将使用immutable.List(mutable.LinkedList)来表示不可变(可变)的选项。

你需要有序、可遍历的序列吗? 那就考虑immutable.List(mutable.LinkedList)、immutable.Vector 或mutable.ArrayBuffer。

List 提供了O(1) 的前插和取头节点复杂度,但追加和读取内部其他元素的复杂度为O(n)。由于Vector 是可持久的数据结构(如前面所讨论的一样),它的所有操作都是O(1) 复杂度。

如果你需要随机访问,ArrayBuffer 是更好的选择。追加、更新和随机访问所需要的均摊时间复杂度均为O(1),但前插和删除复杂度为O(n)。

所以,当你需要一个序列时,如果你多半与头部元素打交道,主要使用List;如果你需要访问一般元素,则使用Vector。Vector 是一个强大、通用的,具有优异全能表现的集合。不过,在有些情况下,ArrayBuffer 能提供更低的常数时间,从而降低开销,提高性能。

其他的通用场景中,我们需要基于键的、O(1) 复杂度的元素存取,也就是数值根据键被存储在immutable.Map(mutable.Map)中。同样,immutable.Set(mutable.Set)被用来测试值是否存在。

猜你喜欢

转载自blog.csdn.net/u014646662/article/details/84333057