From the javadoc of List.scala:
Time: List has O(1) prepend and head/tail access. Most other operations are `O(n)` on the number of elements in the list.
* **This includes the index-based lookup of elements**, `length`, `append` and `reverse`.
This compares (unfavorably) with ArrayList in java. (Yes I realize it is mutable and List is not .. but giving up that performance is a non-starter).
So then what is a likely /preferred "go-to" immutable List implementation in Scala with O(1) for index based lookup (and preferably for length as well). It is understandable/accepted that append and reverse are O(n)
Update Om-nom-nom nominated Vector and I concur (awaiting his making a real answer on this).
From the javadoc on Vector:
Vector is a general-purpose, immutable data structure. It provides random access and updates in effectively constant time, as well as very fast append and prepend. Because vectors strike a good balance between fast random selections and fast random functional updates, they are currently the default implementation of immutable indexed sequences.