ListとArray


  • List は不変オブジェクト (immutable object)
  • Array は可変オブジェクト (mutable object)

Java で言う String(immutable object) と StringBuilder(mutable object) のような関係です。

リスト

リストの書き方には、List のコンストラクタを使うやり方と、中置オペレータ (infix operator) を使うやり方があります。

object Main extends Application {
  val c = List(1, 2, 3)
  println(c)  //List(1, 2, 3)と表示
  
  val f = 1 :: 2 :: 3 :: Nil
  println(f)  //List(1, 2, 3)と表示
}


リストの要素の連結は、中置オペレータ「:::」にて行えます。

object Main extends Application {
  val c = List(1, 2)
  val d = List(3, 4)
  println(c:::d)   // List(1, 2, 3, 4)
  println(1::2::d) // List(1, 2, 3, 4)
  println(c::d)    // List(List(1, 2), 3, 4)
}

「:::」や「::」は List のメソッドとして定義されています。
scala.List は固定長です。リストの連結などを行った場合、新しい scala.List のインスタンスが作成されることに注意する必要があります。


Listは以下の様にループ処理できます。

object Example008 extends Application {
  var list = List(0,1,2,3,4)
  for (l <- list) print(l + " ")

  list.foreach(l => print(l + " "))
}

配列

配列は scala.Array を使います。

object Main extends Application {
  val array = Array(1,2,3);
  array.foreach(e => print(e + " ")) // 1 2 3
}

要素へのアクセスは以下のような感じ。

object Main extends Application {
  val strArray = new Array[String](3)

  strArray(0) = "One "
  strArray(1) = "Two "   // strArray(1) = 2 はコンパイルエラー!
  strArray.update(2, "Three")
  
  strArray.foreach(print) // One Two Three
}