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


70

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

一样的?

谢谢


您可能在scaladoc中看到过,它们是相同的
om-nom-nom

Answers:


72

没有。在Seq doc中,使用size方法明确指出:“此序列的大小,等效于length。”。


63

size在中定义GenTraversableOnce,而length在中定义GenSeqLike,因此length仅对Seqssize存在,而对所有Traversables存在。Seq但是,对于s,正如已经指出的那样,size只需委托给length(这可能意味着,在内联之后,您将获得相同的字节码)。


9

没什么,一个委托给另一个。请参阅SeqLike特征。

  /** The size of this $coll, equivalent to `length`.
   *
   *  $willNotTerminateInf
   */
  override def size = length

9

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

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

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


4

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

但是,经过一段时间后,大概是缓存消失了,size()再次是slow()的7或8倍。

这表明length()是序列的首选。它不仅仅是size()的别称。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.