(一)Array的定义
Array 是一种在 Scala 中用于存储固定大小、相同类型元素的数据结构。它在内存中是连续存储的,这使得访问元素的速度非常快。
类型有两种:Array表示长度不可变的数组 和 ArrayBuffer表示长度可变的数组
(二)不可变数组
Array表示长度不可变的数组,一旦定义之后,不能再增加,删除元素。
我们主要学习它的一些常规操作:创建数组,访问元素,填充Array.range
1. 创建不可变数组
2. 访问元素: 注意不要越界
3. 获取数组的长度:arr.length:获取数组的长度
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(0))
}
}
(三)可变数组
Array表示长度不可变的数组,一旦定义之后,不能再增加,删除元素。 1. 添加元素
(1) 添加一个元素;+= 元素
(2) 添加多个元素;+=(元素1, 元素2)
2. 删除元素
(1) 删除一个元素: -= 元素
(2) 删除多个元素: -= (元素1, 元素2)
(3) 删除指定位置的元素: remove(下标)
(4) 删除指定位置的多个元素:remove(下标起点,下标终点)
package array
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(0)
arr1.remove(0, 3) // 从指定位置开始删除,删除几个?
// 修改
arr1(2) = 700
// 判断是否存在
println(arr1.contains(6)) // true
println(arr1.contains(8)) // false
println(arr1.sum) // 求和
arr1.foreach(ele=>println(ele))
}
}
(四)数组常用方法
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)。
package array
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)
// 切片:只截取个别到新的中 部分 slice
val arr3 = arr1.slice(0,3)
// 过滤
val arr4 = arr1.filter(x => x>0)
// 搜索位置:检索某个元素的下标
val target = -2
val result = arr1.indexOf(target) // 如果没找到这个元素,就返回-1
println(s"${target}的下标是${result}")
arr4.foreach(ele=>println(ele))
}
}
(五)多维数组
最典型的多维数组就是二维数组,类似于表格。有两种定义方式:
直接定义: Array.ofDim(x,y)
从一维数组转化得来: 数组. grouped()
var arr2 = arr1.grouped(5)
var arr3 = arr2.toArray.map(_.toArray)