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)
一样的?
谢谢
Jör*_*tag 55
size是定义的GenTraversableOnce,而length定义在GenSeqLike,所以length只存在于Seqs,而size存在于所有Traversables.Seq然而,对于s,正如已经指出的那样,size只需委托length(这可能意味着,在内联之后,您将得到相同的字节码).
没有,一个代表另一个.见SeqLike特性.
/** The size of this $coll, equivalent to `length`.
*
* $willNotTerminateInf
*/
override def size = length
Run Code Online (Sandbox Code Playgroud)
在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() 的另一个名称。