Scala - Seq的大小和长度有什么区别?

YoB*_*Bre 60 scala seq scala-2.10

Seq的大小和长度有什么区别?何时使用一个而另一个?

scala> var a :Seq[String] = Seq("one", "two")
a: Seq[String] = List(one, two)

scala> a.size
res6: Int = 2

scala> a.length
res7: Int = 2
Run Code Online (Sandbox Code Playgroud)

一样的?

谢谢

Pet*_*ter 58

没有.在Seq doc中,在size方法中明确指出:"此序列的大小,相当于length.".


Jör*_*tag 55

size是定义的GenTraversableOnce,而length定义在GenSeqLike,所以length只存在于Seqs,而size存在于所有Traversables.Seq然而,对于s,正如已经指出的那样,size只需委托length(这可能意味着,在内联之后,您将得到相同的字节码).


mon*_*ack 8

没有,一个代表另一个.见SeqLike特性.

  /** The size of this $coll, equivalent to `length`.
   *
   *  $willNotTerminateInf
   */
  override def size = length
Run Code Online (Sandbox Code Playgroud)


Mar*_*ner 8

在Seq中,它们与其他人提到的相同。但是,有关信息,这是IntelliJ警告的内容scala.Array

在数组和字符串上将.size替换为.length

检查信息:此检查报告array.size和string.size调用。尽管此类调用是合法的,但它们需要对SeqLike进行额外的隐式转换。一个常见的用例是在数组上调用长度,而字符串可能会提供明显的优势。


小智 5

我做了一个实验,使用 Scala 版本 2.12.8,和一百万个项目列表。第一次使用时,length() 比 size() 快 7 或 8 倍。但是在第二次尝试相同的列表时,size() 与 length() 的速度大致相同。

但是,一段时间后,大概缓存消失了,size() 又慢了 7 或 8 倍。

这表明 length() 是序列的首选。它不仅仅是 size() 的另一个名称。