2017-04-01 70 views
0

我想知道转换斯卡拉集合操作,如下面的人的复杂性:将scala集合从一种类型转换为另一种类型的复杂性是什么?

List.fill(n)(1).toArray 
Array.fill(n)(1).toList 
ArrayBuffer(Array.fill(n)(1):_*) 

我想,对于那些exemples我们需要遍历所有元素,因此这将是为O(n),不幸我不知道这些转换下的子例程,因此可能会优化复杂性。

不要犹豫,为其他类型的scala转换增加复杂性。

回答

2

我快速浏览了源代码,它们都像您想象的那样显示为O(n)。

这里是例如子程序copyToArray(由toArray使用):

override /*TraversableLike*/ def copyToArray[B >: A](xs: Array[B], start: Int, len: Int) { 
    var i = start 
    val end = (start + len) min xs.length 
    val it = iterator 
    while (i < end && it.hasNext) { 
    xs(i) = it.next() 
    i += 1 
    } 
} 

source

正如你可以看到线性简单地遍历集合。

相关问题