34 scala中的Array

29 阅读2分钟

一. Array的定义

Array 是一种在 Scala 中用于存储固定大小、相同类型元素的数据结构。它在内存中是连续存储的,这使得访问元素的速度非常快。

类型有两种: Array表示长度不可变的数组 和 ArrayBuffer表示长度可变的数组

二. 不可变数组

Array表示长度不可变的数组,一旦定义之后,不能再增加,删除元素。

我们主要学习它的一些常规操作:创建数组,访问元素,填充Array.range

1. 创建不可变数组

2. 访问元素: 注意不要越界。

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

  Array(1,2,3)
  val arr = Array.range(1,10)
  arr.foreach(println(_)) //1-9
  val arr1 = Array.range(1,10, 3)
  arr1.foreach(println)
  
  println("------")

  val arr2 = Array(1,2,3)
  println(arr2(0)) // 第一个元素
  println(arr2(1)) // 第二个元素
  println(arr2(3)) // 越界错误!第3个元素,java.lang.ArrayIndexOutOfBoundsException
}

结果如图:

image.png

三. 可变数组

Array表示长度不可变的数组,一旦定义之后,不能再增加,删除元素。

1. 新建。要先导入 ArrayBuffer。 可变的数据结构都需要额外导入

2. 访问修改。数组名(下标)=新值。

3. 添加元素

(1) 添加一个元素;+= 元素

(2) 添加多个元素;+=(元素1, 元素2)

4. 删除元素

(1) 删除一个元素: -= 元素

(2) 删除多个元素: -= (元素1, 元素2)

(3) 删除指定位置的元素: remove(下标)

(4) 删除指定位置的多个元素:remove(下标起点,下标终点)

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

  // 可变数组
  val arr1 = scala.collection.mutable.ArrayBuffer(1,2,3)
  // 添加
  arr1 += 4

  arr1 += (5,6,7)

  // 删除
  arr1 -= 4
  // 移除指定下标元素
  // arr1.remove(0)
  arr1.remove(0, 3) // 从指定位置开始移除,删除几个?

  // 修改
  arr1(2) = 700

  // 判断是否存在
  println(arr1.contains(6)) // true
  println(arr1.contains(8)) // false

  // 求和
  println(arr1.sum)

  // 遍历
  arr1.foreach(ele => println(ele))
}

结果如图:

image.png

四. 数组常用方法

1. 映射(Map)。arr.map(f):对数组中的每个元素应用函数f,并返回一个新的不可变数组。

2. 过滤(Filter)。任务搜索

3. 搜索和比较

   - arr.indexOf(elem):返回元素elem在数组中的第一个索引。

   - arr.contains(elem):检查数组是否包含元素elem。

4. 切片(Slice)

    arr.slice(from, until):返回数组的一个子数组,从索引from开始直到索引until(不包括until)。

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

  // 可变数组
  val arr1 = scala.collection.mutable.ArrayBuffer(1,2,0,-1,20,5)

  // 排序
  val arr2 = arr1.sortWith((a,b)=>a>b)

  // 切片:只取整个数组中的某个部分 slice
  val arr3 = arr1.slice(0, 3)

  // 过滤
  val arr4 = arr1.filter(x => x>0)

  // 搜索位置:检索某个元素的下标
  val target = -2
  val result = arr1.indexOf(target) // 如果没找到这个元素,就返回-1
  
  println(s"${target}的下标是 ${result}")

  arr4.foreach(ele=> println(ele))
}

结果如图:

image.png