Here are more general features, each of which extends the previous one:
GenTraversableOnceGenTraversableGenIterableGenSeq
The above lines do not indicate whether the collection is sequential or parallel. If your code requires that everything be executed sequentially (usually if your code has side effects of any type), they are too general for it.
The following features ensure consistent execution:
TraversableOnceTraversableIterableSeqLinearSeq
First, TraversableOnce only allows one method to be called in a collection. After that, the collection was "used." In return, this is common enough to accept iterators as well as collections.
Traversable is a fairly general set that most methods have. There are some things that he cannot do, however, in this case you need to go to Iterable .
All Iterable implements an iterator method that allows you to get an iterator for this collection. This makes it possible for several methods not present in Traversable .
A Seq[A] implements the function Int => A , which means that you can access any element by its index. This does not guarantee effectiveness, but it is a guarantee that each element has an index, and that you can make statements about what this index will be. Contrast this with Map and Set , where you cannot determine what the index of an element is.
A LinearSeq is a Seq that provides fast head , tail , isEmpty and prepend. This is as close to List as possible without actually using List explicitly.
Alternatively, you can have IndexedSeq which has fast indexed access (something List doesn't provide).
See also this question and this FAQ based on this.