1. 定长数组 创建一个定长数组的方式 使用Array定义一个长度不变的数组 object ArrayDemo { def main(args: Array[String]){ //初始化一个长度为8的定长数组,其所有元素均为0 val arr1 = new Array[Int](8) //直接打印定长数组,内容为数组的hashcode值 println(arr1) //将数组转换成数组缓冲,就可以看到原数组中的内容了 //toBuffer会将数组转换长数组缓冲 println(arr1.toBuffer) //注意:如果不使用new获取数组,相当于调用了数组的apply方法,直接为数组赋值 //初始化一个长度为1,值为10的定长数组 val arr2 = Array[Int](10) //输出数组元素值 println(arr2.toBuffer) //定义一个长度为3的定长数组 val arr3 = Array("hadoop", "storm", "spark") //使用()来访问元素 println(arr3(2)) //包含10个整数的数组,初始化值为0 val nums = new Array[Int](10) //遍历数组 for(i <- 0 until nums.length) print(s"$i:${nums(i)} ") println() //包含10个字符串的数组,初始化值为null val strs0 = new Array[String](10) for(i <- 0 until strs0.length) print(s"$i:${strs0(i)} ") println() //赋初值的字符串数组 val strs1 = Array("hello" ,"world") for(i <- 0 until strs1.length) print(s"$i:${strs1(i)} ") println() //访问并修改元素值 strs1(0) = "byebye" for(i <- 0 until strs1.length) print(s"$i:${strs1(i)} ") println() } } result 2. 变长数组 定义变长数组的方式: 使用 ArrayBuffer定义长度按需变化的数组。 import scala.collection.mutable.ArrayBuffer object VarArrayDemo { def main(args: Array[String]){ //定义一个空的可变长Int型数组 val nums = ArrayBuffer[Int]() //在尾端添加元素 nums += 1 //在尾端添加多个元素 nums += (2,3,4,5) //使用++=在尾端添加任何集合 nums ++= Array(6,7,8) //这些操作符,有相应的 -= ,--=可以做数组的删减,用法同+=,++= //使用append追加一个或者多个元素 nums.append(1) nums.append(2,3) //在下标2之前插入元素 nums.insert(2,20) nums.insert(2,30,30) //移除最后2元素 nums.trimEnd(2) //移除最开始的一个或者多个元素 nums.trimStart(1) //从下标2出移除一个或者多个元素 nums.remove(2) nums.remove(2,2) //使用增强for循环进行数组遍历 for(elem <- nums) println(elem) //基于下标访问使用增强for循环进行数组遍历 for(i <- 0 until nums.length) println(nums(i)) } } 执行结果: 3. 遍历数组 1.增强for循环,参见变长数组的代码 2.好用的until会生成脚标,0 until 10 包含0不包含10 参见定长数组部分代码4.1.4. 数组转换 4. 数组转换 yield关键字将原始的数组进行转换会产生一个新的数组,原始的数组不变 bject ArrayTransfer { def main(args: Array[String]): Unit = { //使用for推导式生成一个新的数组 val a = Array(1, 2, 3, 4, 5, 6, 7, 8, 9) val res1 = for(elem <- a) yield 2*elem for(elem <- res1) print(elem+" ") println() //对原数组元素过滤后生成一个新的数组 //将偶数取出乘以10后再生成一个新的数组 val res2 = for(elem <- a if elem%2 == 0)yield 2*elem for(elem <- res2) print(elem+" ") println() //使用filter和map转换出新的数组 val res3 = a.filter(_ % 2 == 0).map(2 * _) for(elem <- res3) print(elem+" ") println() } 执行结果: 5. 数组常用算法 在Scala中,数组上的某些方法对数组进行相应的操作非常方便! object ArrayAlgorithm { def main(args: Array[String]): Unit = { val a = Array(9, 1, 2, 5, 3, 7, 8, 4) //求和 val res1 = a.sum println(res1) //求最大值 val res2 = a.max println(res2) //排序 val res3 = a.sorted // val res4 = a.sortWith(_>_)指定排序方式 for(elem <- res3) print(elem + " ") } } 执行结果: |
|