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
它是一样的吗?
由于
答案 0 :(得分:53)
size
在GenTraversableOnce
中定义,而length
在GenSeqLike
中定义,因此length
仅适用于Seq
s,而size
所有Traversable
都存在{1}}。但是,对于Seq
,正如已经指出的那样,size
只是委托给length
(这可能意味着,在内联之后,你将得到相同的字节码)。
答案 1 :(得分:52)
无。在Seq doc中,在尺寸方法中明确指出:"此序列的大小,相当于length
。"。
答案 2 :(得分:8)
没有,一个代表另一个。见SeqLike特质。
/** The size of this $coll, equivalent to `length`.
*
* $willNotTerminateInf
*/
override def size = length
答案 3 :(得分:1)
在Seq中,它们与其他人提到的相同。但是,有关信息,这是IntelliJ在scala.Array
上警告的内容:
在数组和字符串上用.length替换.size
检查信息:这里 检查报告array.size和string.size调用。虽然这样的电话 是合法的,它们需要额外的隐式转换为 SeqLike一样。一个常见的用例是调用length 数组和字符串可能会提供明显的优势。
答案 4 :(得分:1)
我使用Scala 2.12.8版和一百万个项目列表进行了实验。首次使用时,length()比size()快7或8倍。但是在第二次尝试相同的列表时,size()与length()的速度大致相同。
但是,过了一段时间,大概是缓存消失了,size()再次慢了7到8倍。
这表明length()是序列的首选。它不仅仅是size()的别称。