Array

19 阅读3分钟

Array的定义

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

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

不可变数组

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

可变数组

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

package array

/**
 * Array 和 List 的区别
 * Array:有序,数组;元素在空间上连续,通过下标访问元素效率高
 * List:有序,链表;元素在空间上不连续
 *
 * 两种类型:可变、不可变
 *   不可变:一个数组创建之后,不能添加、不能删除
 *
 * 常用的方法:添加、删除、查找、循环、排序……
 */
object array01 {
  def main(args: Array[String]): Unit = {
    // 可变数组
    val arr1 = scala.collection.mutable.ArrayBuffer(1, 2, 3)
    // 可以直接添加元素
    arr1 += 4
    println(arr1)

    // 不可变数组
    val arr2 = Array(1, 2, 3)
    // 不可变,不能直接添加元素
    // arr2 += 4 // 执行会报错
    println(arr2.mkString("[", ", ", "]")) // 格式化打印数组内容
  }
}

添加元素

  • 添加一个元素;+= 元素
  • 添加多个元素;+=(元素1, 元素2)、
object array03 {
  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(3)
    arr1.remove(0, 3) // 从索引0开始,删除3个元素

    // 修改元素
    arr1(2) = 700

    // 判断元素是否存在
    println(arr1.contains(6)) // 输出:true
    println(arr1.contains(8)) // 输出:false

    // 求和
    println(arr1.sum) // 计算数组元素总和

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

删除元素

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

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

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

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

数组常用方式

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)。

多维数组

object array04 {
 def main(args: Array[String]): Unit = {
   // 可变数组
   val arr1 = scala.collection.mutable.ArrayBuffer(1, 2, 0, -1, 20, 3)

   // 排序(升序)
   val arr2 = arr1.sortWith((a, b) => a > b) // 实际为降序(a>b时a排前)

   // 切片:获取数组中索引0(含)到3(不含)的部分
   val arr3 = arr1.slice(0, 3)

   // 过滤:保留大于0的元素
   val arr4 = arr1.filter(x => x > 0)

   // 搜索位置:查询元素-2的下标(不存在则返回-1)
   val target = -2
   val result1 = arr1.indexOf(target)

   // 输出结果
   println(s"${target}的下标是 ${result1}")
   arr4.foreach(ele => println(ele))
 }
}