一,Array的定义
Array 是一种在 Scala 中用于存储固定大小、相同类型元素的数据结构。它在内存中是连续存储的,这使得访问元素的速度非常快。
类型有两种:Array表示长度不可变的数组 和 ArrayBuffer表示长度可变的数组
二,可变与不可变数组
(1),不可变数组
Array表示长度不可变的数组,一旦定义之后,不能再增加,删除元素。
我们主要学习它的:创建数组,访问元素,填充Array.range
1. 创建不可变数组
2. 访问元素: 注意不要越界。
3. 获取数组的长度:arr.length:获取数组的长度。
package array
/*
*
* Array: 可变,不可变
* 不可变
* scala.Array
* 可变
* scala.collection.mutable.ArrayBuffer
*
*/
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)
}
}
(2),可变数组
Array表示长度不可变的数组,一旦定义之后,不能再增加,删除元素。
创建数组,访问元素,添加,删除,修改
1. 新建。要先导入 ArrayBuffer。 可变的数据结构都需要额外导入
2,访问修改。数组名(下标)=新值
3. 添加元素****
(1) 添加一个元素;+= 元素
(2) 添加多个元素;+=(元素1, 元素2)
4. 删除元素
(1) 删除一个元素: -= 元素
(2) 删除多个元素: -= (元素1, 元素2)
(3) 删除指定位置的元素: remove(下标)
(4) 删除指定位置的多个元素:remove(下标起点,下标终点)
三,常见方法
package array
/*
*
* Array: 可变,不可变
* 不可变
* scala.Array
* 可变
* scala.collection.mutable.ArrayBuffer
*
* 常见的方法
* 1, 添加
* 2, 删除
* 3, 获取指定下标的元素
*/
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)
}
}
(四)数组常用方法*
案例:todos清单。
Map, Filter,indexOf, contains, slice
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)。
(五)多维数组*
最典型的多维数组就是二维数组,类似于表格。有两种定义方式:
直接定义: Array.ofDim(x,y)
从一维数组转化得来: 数组. grouped()
实训内容
package array
object array03 {
case class DreamItem(content: String,var isDone:Boolean,deadline: String,prior:Int)
def main(args: Array[String]): Unit = {
val dreamList = scala.collection.mutable.ArrayBuffer(
DreamItem("有钱",false,"2025-1-1",1),
DreamItem("成为一个特别厉害的人",false,"2026-12-30",2),
DreamItem("变美变瘦",false,"2026-12-30",3),
)
//4
dreamList(2).isDone = true
//5
dreamList(0).prior = 1
//6
val orderListed = dreamList.sortBy(_.prior)
//7
val priorList = orderListed.take(2)
//8
dreamList.foreach(ele => {
println(ele.content,if(ele.isDone)"已实现" else "未实现")
})
}
}