下面主要对Array和ArrayBuffer这两种相对应的集合进行介绍,通过可变数组与多维数组的理论知识结合相关案例深入分析Array和ArrayBuffer的应用。
- Scala 的 Array
Scala的Array表示长度不可变的数组,Array与Java中的大部分功能相同。Scala中的Array[T]对应 Java中的TU],例如Array[String]对应Stringl]。Scala的Array与Java中的不同点为Scala中的Array可以作为序列使用,通过隐式转换的方式把Scala中的数组转换成序列。
Scala中定义数组的四种方式如下:
第一种方式:new Array[T](n)。T表示定义数组的类型,n表示指定数组的长度。
第二种方式:Array。例如定义 Array(1,2,3)数组。
第三种方式:利用数组中的方法。例如可以使用Rang填充数组。
第四种方式:其他集合转换。例如List.toArray表示把List集合转换成数组。
2.Scala的ArrayBuffer
Scala中的ArrayBuffer定义方式同样有多种,这里主要介绍两种。
第一种方式:ArrayBuffer。
第二种方式:new ArrayBuffer。
当定义一个不可变数组时会传递一个数组的长度,表示数组长度不可变。当定义可变数组时,可以不传递数组的长度,Scala会分配一个默认的长度。当长度不够时,ArrayBuffer还会自动扩展。一般情况下会指定一个初始长度,对数组进行预判。
关于可修改的ArrayBuffer,相关代码如下:
Scala
import scala.collection.mutable.ArrayBuffer
//Array:数组
//可修改的:ArrayBuffer
//不可修改的:Array
object Test {
//可修改的:ArrayBuffer
def main(args: Array[String]): Unit = {
//1.新建
val arr1 = ArrayBuffer(1,2,3)
//2.添加
arr1 += 4
arr1.insert(0,100)
//3.删除
arr1 -= 3 //删除指定的元素
arr1.remove(0) //删除指定位置(下标)的元素
//4.修改。通过下标来修改
arr1(0) = 50 //把下标为0的元素赋值为50
// 注意,下标不能越界。有效的范围是:0 - 长度-1
println(arr1.length)//length 长度,用来获取元素的个数
//println(arr1(10)) //IndexOutOfBoundsException
//5.查询
//5.1 判断某个元素在数组中是否存在
println(s"50在数组中吗? ${arr1.contains(50)}")
//5.2 找到指定元素的下标
// -1:表示这个元素在数组中不存在!
println(s"500在数组中的下标是: ${arr1.indexOf(500)}")
//6.遍历
// for,foreach,iterator
for(i <- arr1) println(i)
println("-"*50)
arr1.foreach(println)
println("-"*50)
val it1 = arr1.iterator
while (it1.hasNext){
println(it1.next())
}
}
}
关于不可变的Array,相关代码如下:
Scala
object Test {
//不可变Array:长度不可变
def main(args: Array[String]): Unit = {
val arr1 = Array(1,2,3,4,5,6)
arr1(0) = 100
// arr1.foreach(println)
//数组的常用方法(对于可变和不可变的数组都可以使用)
//1.截取,从源数组中,取一部分,组成一个新数组
// arr1 .slice(起点下标,终点下标-不包括)
val arr2 = arr1.slice(2,5)
arr2.foreach(println)
//2.遍历.foreach
//3.映射 map
//Array(1,2,3)------>Array(2,4,6)
val arr3 = Array(1,2,3).map(e=>e*2)
arr3.foreach(println)//(2,4,6)
//4.过滤 filter
println("_"*50)
//留下奇数,组成一个新的数组
val arr4 = Array(2,3,4,5,6).filter(e => e%2==1)
arr4.foreach(println)
//5.折叠 reduce
println(Array(1,2,3,4).reduce((a,b)=>a+b))
println("_"*50)
}
}
3.Scala的多维数组
Scala中定义多维数组的方式为ofDim方法和Array(Array1,Array2,..,Arrayn)方法。使用ofDim方法时需要传递参数,即Array.ofDim(x,y),表示传递一个x行y列的数组。通过Array(Array1,Array2,..,Arrayn)方式可以静态地把数组中的元素定义为数组,例如Array(Array(0,2),Array(3,4))。动态添加多维数组时需要使用var定义数组。
下面举例说明Scala的数组和多维数组的常用操作。
相关代码如下:
Scala
object Test {
def main(args: Array[String]): Unit = {
//多维数组
val arr5 = Array(Array(1,2,3),
Array(4,5,6),
Array(7,8,9))
//9
println(arr5(2)(2))
//4
println(arr5(1)(0))
//创建二维数组
// val arr6 = Array.ofDim[Int](3,3,3)
// arr6(0)(0)(0) = 1
//由一维数组转化得到二维数组
val arr6 = Array(1,2,3,4,5,6).grouped(3)//对数组中的元素,3个一组,升级为二维数组
while (arr6.hasNext){
val rs = arr6.next()
println(rs(0))
}
}