Scala - What is the difference between size and length of a Seq?
Solution 1
Nothing. In the Seq doc, at the size method it is clearly stated: "The size of this sequence, equivalent to length
.".
Solution 2
size
is defined in GenTraversableOnce
, whereas length
is defined in GenSeqLike
, so length
only exists for Seq
s, whereas size
exists for all Traversable
s. For Seq
s, however, as was already pointed out, size
simply delegates to length
(which probably means that, after inlining, you will get identical bytecode).
Solution 3
In a Seq they are the same, as others have mentioned. However, for information, this is what IntelliJ warns on a scala.Array
:
Replace .size with .length on arrays and strings
Inspection info: This inspection reports array.size and string.size calls. While such calls are legitimate, they require an additional implicit conversion to SeqLike to be made. A common use case would be calling length on arrays and strings may provide significant advantages.
Solution 4
Nothing, one delegates to the other. See SeqLike trait.
/** The size of this $coll, equivalent to `length`.
*
* $willNotTerminateInf
*/
override def size = length
Solution 5
I did an experiment, using Scala version 2.12.8, and a million item list. Upon the first use, length() is 7 or 8 times faster than size(). But on the 2nd try on the same list, size() is about the same speed as length().
However, after some time, presumably the cache is gone, size() is slow() by 7 or 8 times again.
This shows that length() is preferred for sequences. It's not just another name for size().
YoBre
I'm an italian web developer. Currently working with Angular, Coffee scripts and Javascript. I love photography and video editing.
Updated on July 05, 2022Comments
-
YoBre almost 2 years
What is the difference between size and length of a Seq? When to use one and when the other?
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
It's the same?
Thanks
-
ecoe almost 3 yearsI guess I'm the only one who cares, but why?
-
Peter almost 3 yearsMaybe some legacy libraries used size, others used length, so they kept both not to bother having to change one or the other? Wild guess.