Scala是否在线性时间内映射和过滤操作,或者数据库之类的数据结构是否存在一些并行性?
答案 0 :(得分:15)
独立于并行性,map
和filter
操作始终必须至少执行O(n)
工作,其中n
是集合中元素的数量。
如果收集是例如Array
,List
,ArrayBuffer
,HashMap
或HashSet
,然后filter
和map
执行O(n)
。
对于像平衡树这样的特定集合 - 例如mutable.TreeSet
,immutable.TreeMap
,immutable.HashSet
或immutable.Vector
,filter
和map
花费O(n logn)
时间,因为更新它们以添加所有内容随着集合的增长,元素的作用也越来越多。
无论遍历所有元素需要多少工作,许多Scala集合(通常基于树,地图,尝试和数组的集合)都支持并行filter
和map
,因此总量每个处理器完成的工作是O(n / p)
,其中p
是您的机器具有的处理器数量。要使用它们,请在调用par
或filter
之前致电该集合上的map
。
答案 1 :(得分:8)
不,根本就没有并行性,除非你正在做parallel collections,这有点明确。即使有并行性,地图和过滤器也是线性时间操作(但在许多工人之间传播)