В чем разница между оператором scala ::: и ++? В соответствии с doc поведение одинаковое.
Разница между List: operator и ++
Ответ 1
Они делают то же самое, за исключением того, что ++ может использоваться с любыми Traversable и ::: может использоваться только со списками. Кроме того, методы, которые заканчиваются на :, вызываются на объект справа, так что аргумент ::: является префиксом, а аргумент ++ является суффиксом.
Ответ 2
Поведение такое же. Разница заключается в типах, которые они принимают.
::: принимает только List. ++ accepts - это диапазон типов от [B >: A, That], означающий, что ++ будет принимать тип, нижняя граница которого List, а верхняя граница GenTraversableOnce[B] и между ними.
Итак, в диаграммах иерархии типов допустимы классы, расширяющие признак GenTraversableOnce и являющиеся супертипом List

Пример показывает это поведение, используя List и LinkedList.:
scala> val l = List(1,2,3)
l: List[Int] = List(1, 2, 3)
scala> val l2 = List(4,5,6)
l2: List[Int] = List(4, 5, 6)
scala> l ++ l2
res0: List[Int] = List(1, 2, 3, 4, 5, 6)
scala> l ::: l2
res1: List[Int] = List(1, 2, 3, 4, 5, 6)
scala> import scala.collection.mutable.LinkedList
import scala.collection.mutable.LinkedList
scala> val ll = LinkedList(1,2,3)
ll: scala.collection.mutable.LinkedList[Int] = LinkedList(1, 2, 3)
scala> ll ++ l2
res2: scala.collection.mutable.LinkedList[Int] = LinkedList(1, 2, 3, 4, 5, 6)
scala> ll ::: l2
<console>:11: error: type mismatch;
found : scala.collection.mutable.LinkedList[Int]
required: List[?]
ll ::: l2
Также см. заметку Кима о ассоциативности.
Ответ 3
@lukas, этот пост может быть полезен также. Как интерпретировать: из Scala API для списка? Ответы, заданные другими на вопрос в этой должности (мой), помогли понять, что делает метод:, хотя он не противопоставляет его методу ++. Но я думал, что это может помочь.