Scala 作为一门融合了面向对象与函数式编程的语言,其数组体系既保留了对传统不可变数组的支持,也提供了灵活的可变数组工具。
一、Scala 数组的两种核心类型
Scala 中的数组主要分为两类,分别适配不同的业务场景:
1. 不可变数组(scala.Array)
Scala 默认的Array是不可变的 —— 一旦创建,长度和元素都无法修改,适合数据固定、无需变更的场景。
完整代码实现
package array
object array01 {
//Array:可变,不可变
//不可变
//scala.Array
//可变
scala.collection.mutable.ArrayBuffer
def main(args: Array[String]): Unit = {
val arr1 = scala.Array(1,2,3)
//不可变的数组,不能添加
val arr2 = scala.collection.mutable.ArrayBuffer(1,2,3)
arr2 += 4 //可以追加,可以添加元素
println(arr2)
}
}
二、ArrayBuffer 核心操作详解
可变数组ArrayBuffer的核心操作覆盖增、删、改、查、遍历,是处理动态数据的基础:
完整代码实现
package array
object array02 {
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)
}
}
三、实战:梦想清单管理系统
掌握基础操作后,我们通过一个「梦想清单管理」案例,将 ArrayBuffer 与 Scala 样例类结合,实现更贴近实际开发的场景。
需求说明
- 定义「梦想项」样例类,包含内容、完成状态、截止日期、优先级;
- 用 ArrayBuffer 存储梦想列表,支持添加、修改状态、调整优先级;
- 按优先级排序,提取前 5 个高优先级梦想并格式化输出。
完整代码实现
object array03 {
// 定义梦想
case class DreamItem(content: String, isDone: Boolean, deadline: String, prior: Int)
object DreamListManager {
def main(args: Array[String]): Unit = {
// 2. 定义可变ArrayBuffer存储梦想
import scala.collection.mutable.ArrayBuffer
val dreamList = ArrayBuffer[DreamItem]()
// 3. 添加3个梦想
dreamList += DreamItem("学习Scala框架", false, "2027-03-15", 2)
dreamList += DreamItem("阅读100本书", false, "2026-12-30", 1)
dreamList += DreamItem("完成200m跑步达标", false, "2026-09-01", 3)
// 4. 将第2个梦想设为已完成(下标从0开始,第2个对应下标1)
dreamList(1) = dreamList(1).copy(isDone = true)
// 5. 调高第3个梦想的优先级(下标2)
dreamList(2) = dreamList(2).copy(prior = 5)
// 6. 按优先级从高到低排序
val sortedDreams = dreamList.sortBy(_.prior).reverse
// 7. 保存优先级前5的梦想至新列表
val top5Dreams = sortedDreams.take(5)
// 8. 循环输出梦想列表
println("整理后的梦想清单:")
top5Dreams.foreach { item =>
println(s"内容:${item.content} | 状态:${if(item.isDone) "已完成" else "未完成"} | 截止期:${item.deadline} | 优先级:${item.prior}")
}
}
}