Say, I have a sequence of strings as an input and I want to get a new immutable Seq which consists of elements of the input and an item \"c\". Here are
Use the :+ (append) operator to create a new Seq using:
val seq = Seq("a", "b") :+ "c"
// seq is now ("a","b","c")
Note: :+ will create a new Seq object.
If you have
val mySeq = Seq("a","b")
and you will call
mySeq :+ "c"
mySeq will still be ("a","b")
Note that some implementations of Seq are more suitable for appending than others. List is optimised for prepending. Vector has fast append and prepend operations.
::: is a method on List which requires another List as its parameter - what are the advantages that you see in it accepting other types of sequence? It would have to convert other types to a List. If you know that List is efficient for your use case then use ::: (if you must). If you want polymorphic behaviour then use the generic ++.
There's no instantiation overhead to using Nil; you don't instantiate it because it's a singleton.