Scala中定义数组、增强for遍历scala数组、unitl生成脚标遍历scala数组、数组转换、数组常用算法 05

1 定长数组和变长数组

  • 定长数组定义格式:
    val arr = new Array[T](数组长度)

  • 变长数组定义格式:
    val arr = ArrayBuffer[T]()
    注意需要导包:import scala.collection.mutable.ArrayBuffer

  • 代码如下

import scala.collection.mutable.ArrayBuffer
object ArrayDemo{
	def main(args:Array[String]){
		//1. 初始化一个长度为8点定长数组,其所有元素均为0
		//如果是new,相当与调用数组的apply方法,直接为数组赋值
		val arr1 = new Array[Int](8)
		//直接打印定长数组,内容为数组的hashcode值
		println(arr1)
		//将数组转换成数组缓冲,就可以看到原数组中的内容了
		//toBuffer会将数组转换成变长数组缓冲
		println(arr1.toBuffer)
	
		//2. 第二个定义数组的方法,直接赋值
		val arr2 = Array("hadoop","storm","spark")
		//使用()来访问元素,打印某一个元素
		println(arr2(2))
	
		//如下是变长数组
		val ab = ArrayBuffer[Int]()
		//向数组缓冲的尾部追加一个元素,+=代表尾部追加一个元素
		ab += 1
		//向尾部追加多个元素
		ab += (2,3,4,5)
		//追加一个数组 ++=
		ab ++= Array(6,7)
		//追加一个数组缓冲
		ab ++= ArrayBuffer(8,9)

		//在数组某个位置插入元素用insert,从下标插入,
		//从下标0位置开始插入-1,0
		ab.insert(0,-1,0)

		//删除数组某个位置的元素用remove,按照下标删除
		ab.remove(0)
		println(ab)
		
	}
}

2. 增强for遍历Scala中的数组

  • 增强for循环遍历
  • 使用unitl生成脚标, 0 unitl 10 包含0不包含10
    Scala中定义数组、增强for遍历scala数组、unitl生成脚标遍历scala数组、数组转换、数组常用算法 05
  • 代码
object ForArrayDemo{
	def main(args:Array[String]){
		//1. 使用增强for循环,遍历数组
		val arr = Array(1,2,3,4,5,6,7,8,9)
		for(i <- arr)
			println(i)
		
		//2. 使用until,这样会生成一个Range
		//reverse方法会将调用它的Range反转
		for(i <- (0 until arr.length).reverse)
			println(arr(i))		
	}
}

3. 数组转换 yield

  • yield关键字能够将原始数组进行转换,会生成一个新的数组,原始数组不变
  • 代码
object ArrayYieldDemo{
	def main(args:Array[String]){
		//1. 定义一个数组
		val arr = Array(1,2,3,4,5,6,7,8,9)
		//2. 将偶数取出乘以10以后再生成一个新的数组
		val res = for(e <- arr if e % 2 == 0) yield e * 10
		println(res.toBuffer)
		
		//3. 更高级的写法,用着更爽
		//filter是过滤,接收一个返回值为boolean的函数
		//map相当于将数组中年的每一个元素取出,应用传进去的函数
		val r = arr.filter(_ % 2 == 0).map(_ * 10)
		println(t.toBuffer)
	}
}

4. 数组中常用的算法

Scala中定义数组、增强for遍历scala数组、unitl生成脚标遍历scala数组、数组转换、数组常用算法 05