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と比べるとなんだか楽だなあってすごい思います。