Uniform List can be created in Scala using List. fill() method. List. fill() method creates a list and fills it with zero or more copies of an element.
Scala Lists are quite similar to arrays which means, all the elements of a list have the same type but there are two important differences. First, lists are immutable, which means elements of a list cannot be changed by assignment. Second, lists represent a linked list whereas arrays are flat.
Scala uses immutable set by default. Import scala. collection. mutable.
A Seq is an Iterable that has a defined order of elements. Sequences provide a method apply() for indexing, ranging from 0 up to the length of the sequence. Seq has many subclasses including Queue, Range, List, Stack, and LinkedList. A List is a Seq that is implemented as an immutable linked list.
ListBuffer
is a mutable list which has constant-time append, and constant-time conversion into a List
.
List
is immutable and has constant-time prepend and linear-time append.
How you construct your list depends on the algorithm you'll use the list for and the order in which you get the elements to create it.
For instance, if you get the elements in the opposite order of when they are going to be used, then you can just use a List
and do prepends. Whether you'll do so with a tail-recursive function, foldLeft
, or something else is not really relevant.
If you get the elements in the same order you use them, then a ListBuffer
is most likely a preferable choice, if performance is critical.
But, if you are not on a critical path and the input is low enough, you can always reverse
the list later, or just foldRight
, or reverse
the input, which is linear-time.
What you DON'T do is use a List
and append to it. This will give you much worse performance than just prepending and reversing at the end.
And for simple cases:
val list = List(1,2,3)
:)
Uhmm.. these seem too complex to me. May I propose
def listTestD = (0 to 3).toList
or
def listTestE = for (i <- (0 to 3).toList) yield i
You want to focus on immutability in Scala generally by eliminating any vars. Readability is still important for your fellow man so:
Try:
scala> val list = for(i <- 1 to 10) yield i
list: scala.collection.immutable.IndexedSeq[Int] = Vector(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
You probably don't even need to convert to a list in most cases :)
The indexed seq will have everything you need:
That is, you can now work on that IndexedSeq:
scala> list.foldLeft(0)(_+_)
res0: Int = 55
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With