Всегда используйте :::
. Существует две причины: эффективность и безопасность типов.
Эффективность
x ::: y ::: z
быстрее, чем x ++ y ++ z
, поскольку :::
является правильной ассоциативной. x ::: y ::: z
анализируется как x ::: (y ::: z)
, который алгоритмически быстрее, чем (x ::: y) ::: z
(последний требует O (| x |) дополнительных шагов).
Тип безопасности
С :::
вы можете конкатенировать только два List
s. С помощью ++
вы можете добавить любую коллекцию в List
, что ужасно:
scala> List(1, 2, 3) ++ "ab"
res0: List[AnyVal] = List(1, 2, 3, a, b)
++
также легко смешивается с +
:
scala> List(1, 2, 3) + "ab"
res1: String = List(1, 2, 3)ab