Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala列表连接比较_Scala - Fatal编程技术网

Scala列表连接比较

Scala列表连接比较,scala,Scala,scala中的列表连接有两种方法::和++。 例如,有3个列表-x、y、z。我听说x::y::z比x++y++z快,因为:是正确的关联x:::y::z解析为x::(y:::z)。 我接下来的问题是: 上面这个词是真的吗 :和++的时间复杂度是多少 上面这个词是真的吗 不,两者都需要O(n)时间来确定列表::是右关联的,它将首先连接y和z,然后连接x(x::(y:::z)),其中+将首先连接x和y,然后连接z((x+++y)++z) ::和++的时间复杂度是多少 O(n)。具体来说,列表[A]上的

scala中的列表连接有两种方法:
++
。 例如,有3个列表-x、y、z。我听说
x::y::z
x++y++z
快,因为
是正确的关联<代码>x:::y::z解析为
x::(y:::z)
。 我接下来的问题是:

  • 上面这个词是真的吗
  • ++
    的时间复杂度是多少
  • 上面这个词是真的吗

    不,两者都需要O(n)时间来确定列表<代码>::是右关联的,它将首先连接
    y
    z
    ,然后连接
    x
    x::(y:::z))
    ,其中
    +
    将首先连接
    x
    y
    ,然后连接
    z
    (x+++y)++z

    ::和++的时间复杂度是多少

    O(n)。具体来说,
    列表[A]
    上的
    ++
    经过优化,可以在内部使用
    来连接两个列表:

    override def ++[B >: A, That](that: GenTraversableOnce[B])
                                 (implicit bf: CanBuildFrom[List[A], B, That]): That =
      if (bf eq List.ReusableCBF) (this ::: that.seq.toList).asInstanceOf[That]
      else super.++(that)
    

    对于答案,请解释为什么
    ++
    @pacman快,它不是。正如我所说,
    列表[A]
    上的
    ++
    将在内部调用
    。这篇文章中我读到
    ++
    快,你明白我的意思了吗?@pacman我不知道为什么OP会这样写。实现细节是,
    ++
    经过优化,可以使用
    ,因此您不应该在这里注意到任何性能差异。我将试着解释他在回答中的意思。