一、导入
在编程过程中,我们经常需要存储和操作一组数据。比如,存储一个班级学生的成绩或者一个图像的像素值。在Scala中,Array是一种非常重要的数据结构,可以帮助我们有效地处理这类数据。今天我们就来深入学习Scala中的Array。
二、Array的定义与类型
Array是Scala中用于存储固定大小、相同类型元素的数据结构。它在内存中是连续存储的,这使得访问元素的速度非常快。Scala提供了两种类型的数组:
- Array:表示长度不可变的数组
- ArrayBuffer:表示长度可变的数组
三、不可变数组的基本操作
案例:不可变数组的创建与特点
package array
object array01 {
def main(args: Array[String]): Unit = {
val arr1 = scala.Array(1,2,3)
// arr1 += 4; 不可变的数组,不能添加
val arr2 = scala.collection.mutable.ArrayBuffer(1,2,3)
arr2 += 4 // 可变数组,可以添加元素
println(arr2)
}
}
代码结果
代码分析
- 不可变数组的创建:使用
scala.Array(1,2,3)创建不可变数组 - 不可变特性:注释掉的
arr1 += 4说明了不可变数组不能添加元素 - 可变数组的创建:需要从
scala.collection.mutable包中导入ArrayBuffer - 可变特性:
arr2 += 4展示了可变数组可以动态添加元素 - 类型区分:明确展示了两种数组类型在创建和操作上的区别
四、可变数组的完整操作
案例:可变数组的增删改查操作
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构造函数初始化数组 - 批量添加元素:
arr2 += (4,5)展示了如何一次性添加多个元素 - 删除元素:
arr2 -= 2删除值为2的元素 - 元素访问:
arr2(0)通过索引访问数组第一个元素 - 元素修改:
arr2(0) = 100修改指定位置的元素值 - 数组遍历:使用
foreach方法遍历数组所有元素 - 操作顺序:代码展示了增、删、查、改、遍历的完整操作流程
五、数组常用操作方法
- 映射(Map):
arr.map(f)对数组中的每个元素应用函数f,返回新的不可变数组 - 过滤(Filter):根据条件过滤数组元素
- 搜索和比较:
arr.indexOf(elem):返回元素的第一个索引arr.contains(elem):检查是否包含元素
- 切片(Slice):
arr.slice(from, until)返回子数组
六、多维数组简介
多维数组最典型的是二维数组,类似于表格。有两种主要创建方式:
- 直接定义:
Array.ofDim[Type](rows, cols) - 从一维数组转换:使用
grouped()方法
七、总结
核心知识点回顾
-
数组类型选择:
- 使用
Array创建不可变数组(大小和内容固定) - 使用
ArrayBuffer创建可变数组(需要导入相应包)
- 使用
-
基本操作:
- 创建:使用构造函数初始化
- 访问:通过索引访问元素
- 修改:可变数组支持元素值的修改
- 增删:只有可变数组支持动态添加和删除元素
-
重要特性:
- 不可变数组更安全,适合函数式编程
- 可变数组更灵活,适合需要动态调整的场景
- 数组在内存中连续存储,访问速度快