Statistical Programming

JavaとScalaの違いその8 ... arrayは使わない!Listコレクション

今日はコレクションのひとつであるlistについてです。

 

import scala.collection.mutable.ListBuffer

object ListTest extends App {

def printlist(listInt:ListBuffer[Int], listStr:ListBuffer[String])={

 println(listInt)

 println(listStr)

}

//空のリスト作成

var list1=ListBuffer[Int]();

//初期化とリスト作成

var list2=ListBuffer("a","b","c")

//リスト最後に要素を追加

list1 +=100

list2 +="ddd"

printlist(list1,list2)

//指定した位置に挿入

list1.insert(1,22)

list2.insert(0, "newA")

printlist(list1,list2)

//指定した位置の要素を取得

list1(0)

list2(2)

printlist(list1,list2)

//指定位置の要素入れ替え

list1.update(1,2)

list2.update(0,"???")

printlist(list1,list2)

//要素数取得

list1.length

list2.length

list1.size

list2.size

printlist(list1,list2)

//特定の要素を削除

list1.remove(3)

list2.remove(3)

printlist(list1,list2)

//全要素削除

list1.clear

list2.clear

printlist(list1,list2)

 

 

}

 

 

コンソール

 

ListBuffer(100)

ListBuffer(a, b, c, ddd)

ListBuffer(100, 22)

ListBuffer(newA, a, b, c, ddd)

ListBuffer(100, 22)

ListBuffer(newA, a, b, c, ddd)

ListBuffer(100, 2)

ListBuffer(???, a, b, c, ddd)

ListBuffer(100, 2)

ListBuffer(???, a, b, c, ddd)

Exception in thread "main" java.lang.IndexOutOfBoundsException: 3

at scala.collection.mutable.ListBuffer.remove(ListBuffer.scala:318)

at test.ListTest$delayedInit$body.apply(ListTest.scala:35)

at scala.Function0$class.apply$mcV$sp(Function0.scala:40)

at scala.runtime.AbstractFunction0.apply$mcV$sp(AbstractFunction0.scala:12)

at scala.App$$anonfun$main$1.apply(App.scala:71)

at scala.App$$anonfun$main$1.apply(App.scala:71)

at scala.collection.immutable.List.foreach(List.scala:318)

at scala.collection.generic.TraversableForwarder$class.foreach(TraversableForwarder.scala:32)

at scala.App$class.main(App.scala:71)

at test.ListTest$.main(ListTest.scala:3)

at test.ListTest.main(ListTest.scala)

 

 

 

最後の方にあるながーいやつは、中身のないlistを無理矢理参照しようとしたために生じたエラーです。Javaと比べるとなんだか楽だなあってすごい思います。