If you need to mutate stuff, use ArrayBuffer or LinkedBuffer instead. However, it would be better to address this statement:
I need to declare empty list or empty
maps and some where later in the code
need to fill them.
Instead of doing that, fill the list with code that returns the elements. There are many ways of doing that, and I'll give some examples:
// Fill a list with the results of calls to a method
val l = List.fill(50)(scala.util.Random.nextInt)
// Fill a list with the results of calls to a method until you get something different
val l = Stream.continually(scala.util.Random.nextInt).takeWhile(x => x > 0).toList
// Fill a list based on its index
val l = List.tabulate(5)(x => x * 2)
// Fill a list of 10 elements based on computations made on the previous element
val l = List.iterate(1, 10)(x => x * 2)
// Fill a list based on computations made on previous element, until you get something
val l = Stream.iterate(0)(x => x * 2 + 1).takeWhile(x => x < 1000).toList
// Fill list based on input from a file
val l = (for (line <- scala.io.Source.fromFile("filename.txt").getLines) yield line.length).toList
addoperation onList?scala.collection.JavaConversions? If you did, you are seeing the very reason why I recommendJavaConvertersinstead:dmanddkare being converted into a Java collection, and then theaddmethod called on that collection. Worse,dmanddkare not being modified, even if you did not get an error. And, by the way, the error is that1 -> "ok"isMap[Int,String], notMap[String, Object].