Подтвердить что ты не робот

Scala - В чем разница между размером и длиной Seq?

В чем разница между размером и длиной 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

То же самое?

Спасибо

4b9b3361

Ответ 1

Ничего. В Seq doc в методе размера четко указано: "Размер этой последовательности, эквивалентный length.".

Ответ 2

size определяется в GenTraversableOnce, тогда как length определяется в GenSeqLike, поэтому length существует только для Seq s, тогда как size существует для всех Traversable s. Однако для Seq s, как уже указывалось, size просто делегирует length (что, вероятно, означает, что после встраивания вы получите одинаковый байт-код).

Ответ 3

Ничего, один делегирует другому. См. Свойство SeqLike.

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

Ответ 4

В Seq они такие же, как и другие. Однако, для информации, это то, что IntelliJ предупреждает о scala.Array:

Замените .size на .length на массивах и строках

Информация о проверке: эта проверка сообщает о вызовах array.size и string.size. Хотя такие вызовы являются законными, они требуют дополнительного неявного преобразования в SeqLike. Распространенным вариантом использования будет длина вызова для массивов, и строки могут обеспечить значительные преимущества.

Ответ 5

Я провел эксперимент с использованием Scala версии 2.12.8 и списка миллионов предметов. При первом использовании length() в 7 или 8 раз быстрее, чем size(). Но со второй попытки в том же списке size() примерно такой же скорости, как length().

Однако через некоторое время, по-видимому, кеш исчезает, size() снова медленно() в 7 или 8 раз.

Это показывает, что length() является предпочтительным для последовательностей. Это не просто другое название для size().