一.若长度固定则使用Array,若长度可能有变化则使用ArrayBuffer
固定长度数组:
如val nums=new Array[Int](10) //10个整型数组,所有元素初始化为0;
val a=new Array[String](10) //10个元素的字符串数组,所有元素为null
变长数组:
ArrayBuffer(相当于Java中的ArrayList)
import scala.collection.mutable.ArrayBuffer val b=ArrayBuffer[Int]() //或者new ArrayBuffer[Int] //一个空的数组缓冲,准备存放整数 b+=1 //ArrayBuffer(1) //用+在尾端添加元素 b+=(1,2,3,5) //ArrayBuffer(1,1,2,3,5) //在尾端添加多个元素,以括号包起来 b++=Array(8,13,21) //ArrayBuffer(1,1,2,3,5,8,13,21) //可以使用++=操作符追加任何集合 b.trimEnd(5) //ArrayBuffer(1,1,2) //移除最后5个元素
//可以在任意位置插入和移除元素,但是不高效 b.insert(2,6) //ArrayBuffer(1,1,6,2) //在下标2之前插入 b.insert(2,7,8,9) //ArrayBuffer(11,7,8,9,6,2) //可以插入任意多的元素 b.remove(2) //ArrayBuffer(1,1,8,9,6,2) b.remove(2,3) //ArrayBuffer(1,1,2) //第二个参数的含义是移除多少个元素
b.toArray()//数组缓冲转换为固定长度数组
a.toBuffer()//固定长度转换为数组缓冲
二.提供初始值时不要使用new
val s=Array("Hello","World")长度为2的Array(String),已经提供初始值就不需要new
三.用()来访问元素
注意使用()来访问元素,而不是[]
四.用for(elem<-arr)来遍历元素
for(i<- 0 until a.length)...:util是RichInt类的方法,返回所有小于(不包括)上限的数字(o until 10实际调用的是0.until(10))。
每两个元素一跳(0 util (a.length,2));
从数组尾端开始:(0 until a.length).reverse;
如果在循环体中不需要用到数组下标,直接访问元素for(elem<-a)
五.用for(elem<-arr if...)...yiels...来将原数组转型为新数组
例子:
val a=Array(2,3,5,7,11) val result= for (elem-<a) yield 2*elem //result为Array(4,6,10,14,22)
注:for(...)yield创建的是一个类型与原始集合相同的新集合;
常用算法,Array(1,2,3).sum/min/max,Array(22,4,5,1).sorted(_<_)[从小到大],Array(22,4,5,1).sorted(_>_)[从大到小]
六.Scala数组和Java数组可以互操作;用ArrayBuffer,使用scala.collection.JavaConversions中的转换函数
多维数组创建:
val matrix=Array.ofDim[Double](3,5)//三行四列
使用scala.collection.JavaConversions转换案例: