scala中的Array

25 阅读2分钟

Array的定义

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

类型

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

不可变数组

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

  1.  创建不可变数组
  2. 访问元素: 注意不要越界。
  3. 获取数组的长度:arr.length:获取数组的长度。
// 1. 创建
val arr = Array(1, 2, 3)
// 2. 访问
println(arr(0)) // 输出1
println(arr(4)) // 越界错误
// 3. 长度
println(s"数组的长度为:${arr.length}")
// 4. 特殊数组
val arr1 = Array.range(1,10) // 1-10共10个元素
val arr2 = Array.range(1,10,2) // 1,3,5,7,9 .1-10,步长为2

可变数组

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

  1. 新建。要先导入 ArrayBuffer。 可变的数据结构都需要额外导入
  2. 访问修改。数组名(下标)=新值。
  3. 添加元素

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

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

4. 删除元素

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

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

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

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

/*
Array:可变,不可变
不可变
  scala.Array
可变
  scala.collection.mutable.ArrayBuffer
  常见方法
  1.添加
  2.删除
  3.获取指定下标的元素
 */
object day40 {
  def main(args: Array[String]): Unit = {
    val arr2=scala.collection.mutable.ArrayBuffer(1,2,3)
    //1.添加
    arr2+=(4,5)//可变数组,可以添加元素
    //2.删除
    arr2-=2
    //3.获取指定下标的元素
    //arr2(0)下标为0,数组中的第一个元素
    println(arr2(0))
    //4.修改
    arr2(0)=100
    //5.遍历
    arr2.foreach(ele=>println(ele))

   // println(arr2)
  }
}

实训内容****

任务背景:梦想清单管理。

1. 使用case class 定义DreamItem类。它的属性有:内容,是否完成,截止日期,优先级。

2. 定义可变Array来保存DreamItem。

3. 添加3个梦想

4. 将第2个梦想设置为已完成。

5. 调高第3个梦想的优先级

6. 根据优先级进行从高到低排序

7. 把优先级排名前5的梦想保存到一个新的列表中

8. 循环输出梦想列表

object array03 {
  case class DreamItem(content:String, var isDone:Boolean, deadLine:String, var prior: Int)
  def main(args: Array[String]): Unit = {
    val dreamList = scala.collection.mutable.ArrayBuffer(
      DreamItem("20km", false, "2026-09-01", 2),
      DreamItem("1W", false, "2026-12-30", 4),
      DreamItem("连续接球1个3分", false, "2026-07-10", 3),
    )

    // 4
    dreamList(2).isDone = true
    // 5
    dreamList(0).prior = 1
    // 6
    val orderListed = dreamList.sortBy(_.prior)
    // 7 取前两个
    val priorList = orderListed.take(2)
    // 8
    priorList.foreach(ele => {
      println(ele.content, if(ele.isDone) "已实现" else "未实现", ele.prior)
    })
  }
}