一.若长度固定则使用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转换案例:

  

  

01-07 10:18
查看更多