変数をまとめて構造体ちっくにしたクラスと、Map。
 どっちが速いか試してみましたの。

 まずはMap。
 キーは'a~jの10種類、値はそれぞれ0~9ですの。
 'aと'jの値を参照する処理を100万回を1セットとして、10回計測。
 結果は、
 187, 177, 176, 177, 177, 177, 177, 178, 178, 177(ミリ秒)

 次に構造体なクラス。
 a~jという10個の変数を用意して、値はそれぞれ0~9ですの。
 aとjの値を参照する処理を以下同文ですの。
 結果は、
 7, 2, 4, 4, 4, 4, 4, 3, 4, 4(ミリ秒)

 うーん。土台、勝負になってませんの。
 Mapのほうが便利そうだと思ったのですけど、もし固定キーで決め打つのなら、あえてMapにしない手もあるかもですの。


 ・おまけ
 定数に名前を付けたら、それはもうキーですの!
 と思いこむことにして、
 他のコレクションを添字(0番と9番)で参照してみましたの。

 List
 236, 233, 233, 232, 229, 229, 228, 230, 227, 228(ミリ秒)

 ArrayBuffer
 48, 47, 47, 47, 45, 46, 46, 47, 47, 47(ミリ秒)

 Array(配列)
 6, 5, 5, 4, 5, 4, 5, 5, 4, 3

 意外にも、Scalaでも配列はかなり低レベルな概念のようですの。
 ArrayBufferも相当速いと思うのですけど、さすがに内部処理の有無という壁は厚いですの。
 Listは…末尾参照が苦手とはいえ、10項目しか無いのにMapより遅いとは思わなかったですの。。でもまぁ、見方を変えれば、それだけMapが高速ということかも知れませんの。

Scalaは全ての値がオブジェクトなので、
ほかの関数に値を渡すときは必然的に参照渡しになるはずですの。

でも参照渡しだと、引数をつたって元の値をいじれてしまうような…。
それって、わざわざ不変リストとか用意してる意味あるんですの??
と思ったので、試してみましたの。

object Sample {

 def main(args: Array[String]){
  var list = List(1,2,3)
  update(list)
 }

 def update(obj:List[Int]){
  obj = list.updated(1,999)
 }

}

へぇぇー。これを動かそうとすると、
代入するところで「reassignment to val」って出て、コンパイル出来ませんの。

なるほどー、仮引数(obj)はvalで宣言してるのと同じ扱いみたいですの。
これなら安心して不変リストを投げ回せますの。ぶんぶーん