The ::: method is specific to List , and ++ is part of any Traversable .
The difference arises from two things. Firstly, List is one of the original Scala collections, it is used a lot in the compiler and undergoes special optimization. The concatenation :: is the same as in the ML language family, one of the great Scala inspirations and ::: extrapolated from it.
On the other hand, ++ accompanied by a redesign of Scala collections on Scala 2.8.0, which made methods and inheritance consistent. I think it existed before (for example, on Set ), but the collections did not have a common superclass, so it was basically an ad hoc method for other collections.
In terms of performance, ::: should beat ++ , but probably not significantly.
source share