1.数组

1.1 定长数组和变长数组

(1) 定长数组定义格式:

val arr = new ArrayT

(2) 变长数组定义格式:

val arr = ArrayBufferT

注意需要导包:t import scala.collection.mutable.ArrayBuffer

object collection {
  def main(args: Array[String]): Unit = {

    //初始化一个长度为 8 的定长数组,其所有元素均为 0
     val arr1 =  new Array[Int](8)
    //直接打印定长数组,内容为数组的 hashcode 值
    println (arr1)
    //将数组转换成数组缓冲,就可以看到原数组中的内容了
    //toBuffer 会将数组转换长数组缓冲
    println (arr1.toBuffer)
    //注意:如果 new,相当于调用了数组的 apply 方法,直接为数组赋值
    //初始化一个长度为 1 的定长数组
     val arr2 = Array [Int](10)
    println (arr2.toBuffer)
    //定义一个长度为 3 的定长数组
     val arr3 = Array ( "hadoop", "storm", "spark")
    //使用()来访问元素
    println (arr3(2))
    //变长数组(数组缓冲)
    //如果想使用数组缓冲,需要导入 import scala.collection.mutable.ArrayBuffer
     val ab = ArrayBuffer[Int]()
    //向数组缓冲的尾部追加一个元素
    //+=尾部追加元素
    ab += 1
    //追加多个元素
    ab += (2, 3, 4, 5)
    //追加一个数组++=
    ab ++= Array (6, 7)
    //追加一个数组缓冲
    ab ++= ArrayBuffer(8,9)
    //打印数组缓冲 ab
    //在数组某个位置插入元素用 insert,从某下标插入
    ab.insert(0, -1, 0)
    //删除数组某个位置的元素用 remove 按照下标删除
    ab.remove(0)
    println (ab)
  }
}

执行结果:
(Scala最全系统学习)Scala基础04---数组

1.2 遍历数组

1.增强 for 循环
2.好用的 until 会生成脚标,0 until 10 包含 0 不包含 10
(Scala最全系统学习)Scala基础04---数组

def main(args: Array[String]) {
	//初始化一个数组
    val arr = Array (1,2,3,4,5,6,7,8)
	//增强 for 循环
	for(i <- arr)
		println (i)
	//好用的 until 会生成一个 Range
	//reverse 是将前面生成的 Range 反转
	for(i <- (0 until arr.length).reverse)
		println (arr(i))
}
1.3数组转换

yield 关键字将原始的数组进行转换会产生一个新的数组,原始的数组不变

  def test2(args: Array[String]) {
    //定义一个数组
     val arr = Array (1, 2, 3, 4, 5, 6, 7, 8, 9)
    //将偶数取出乘以 10 后再生成一个新的数组
     val res =  for (e <- arr  if e % 2 == 0)  yield e * 10
    println (res.toBuffer)
    
    //更高级的写法,用着更爽
    //filter 是过滤,接收一个返回值为 boolean 的函数
    //map 相当于将数组中的每一个元素取出来,应用传进去的函数
     val r = arr.filter(_ % 2 == 0).map(_ * 10)
      println (r.toBuffer)
  }
1.4 数组常用算法

(Scala最全系统学习)Scala基础04---数组

相关文章: