在 scala 中, 数组分为定长数组和可变数组
一、定长数组:
声明方式:
① new Array[Type](length):声明一个指定类型,指定长度的空数组
② val array: Array[Int] = Array(1,2,3):通过初始化元素的个数来直接确定数组的长度
常用操作:
:+:在数组的最右边增加元素+::在数组的最左边增加元素++: 拼接两个数组,并返回一个新的数组++=:拼接两个数组mkString(str):将数组转成字符,按照 指定的 “str” 进行拼接length/size:获取数组的大小(长度).sum:求数组元素的总和(仅对数值型数组有效).head: 获取第一个元素.last: 获取最后一个元素tail:去除第一个元素, 剩下的元素组成的集合take(2):去前 n个元素, 返回时一个新的集合
实例
/**
* 数组:
* 定长数组: 一旦声明长度, 不可更改
*
* 底层就是 Java 的数组
*
* 数组的声明:
* 1. new Array[Type](length)
* 2. 通过初始化元素的个数来直接确定数组的长度
* val array: Array[Int] = Array(1,2,3)
*
*
* 可变数组:
*
* 数组的声明:
* val buffer: ArrayBuffer = new ArrayBuffer[Int]
*/
def main(args: Array[String]): Unit = {
// 声明定长数组的第一种方式: 初始化并指定数组大小
val array1 = new Array[Int](10)
// 声明定长数组的第二种方式: 初始化并赋值, 数组大小由()中参数个数决定
var array2 = Array(1, 2, 3, 4, 5)
array2(0) = 10
// array.size 等同于 array.length
println(s"array1.size: ${array1.size}")
println(s"array2.length: ${array2.length}")
println(s"array2: ${array2.mkString(", ")}")
println()
// array2 :+= -1 在数组的最左边插入 -1
array2 :+= -1
println(s"array2: ${array2.mkString(", ")}")
// array2 +:= -100 在数组的最右边插入 -100
array2 +:= -100
println(s"array2: ${array2.mkString(", ")}")
val array3 = Array(10,20,30)
// 两个集合拼接
val array: Array[Int] = array2 ++ array3
println(s"array: ${array.mkString("-> ")}")
//两个集合拼接
array1 ++= array3
println(s"array2: ${array1.mkString(" -->")}")
}
二、二维定长数组:
声明方式:
Array.ofDim[类型](一维数组长度, 二维数组长度)
案例:
def main(args: Array[String]): Unit = {
// 声明二维数组
val array: Array[Array[Int]] = Array.ofDim[Int](2,3)
for (arr <- array) {
for (elem <- arr) {
println(elem)
}
}
}
三、可变数组:
声明方式:
① new ArrayBuffer[Int]:声明一个 Int 类型的 可变数组
② ArrayBuffer[Int](1,2):声明一个 Int 类型的 可变数组,并指定初始值
常用操作:
:+:在数组的最右边增加元素+:在数组的最左边增加元素+=:在数组最右边增加元素-=:删除数组元素,仅删除第一次匹配的元素++: 拼接两个数组,并返回一个新的数组++=:拼接两个数组.insert(i, n):在指定下标插入元素.remove(n):删除指定下标的元素.remove(n, c):从指定下标开始删除元素,连续删除 c 个.sum:求数组元素的总和(仅对数值型数组有效).head: 获取第一个元素.last: 获取最后一个元素tail:去除第一个元素, 剩下的元素组成的集合take(2):去前 n个元素, 返回时一个新的集合
特殊说明:
① 增加数组元素 也可以通过 += :+= +:= 来增加元素, 但是没有 :-= -:= 来删除元素
② -=:只删除第一个碰到的元素
实例:
def main(args: Array[String]): Unit = {
//声明可变数组, 声明时指定需要指定类型
var buffer: ArrayBuffer[Int] = ArrayBuffer[Int](1,2)
println(s"buffer.size: ${buffer.size}")
println(s"buffer.size: ${buffer.mkString(", ")}")
//增加数组元素
buffer :+= 100
println(s":+ 后buffer.size: ${buffer.mkString(", ")}")
buffer :+= 100
println(s":+ 后buffer.size: ${buffer.mkString(", ")}")
buffer +:= -100
println(s"+: 后buffer.size: ${buffer.mkString(", ")}")
buffer += 101
println(s"+= 后buffer.size: ${buffer.mkString(", ")}")
//insert: 第一个参数 -> 插入元素到指定下标, 插入的元素
buffer.insert(buffer.size, 102)
println(s"insert 后buffer.size: ${buffer.mkString(", ")}")
//删除数组元素(如果该元素在数组中存在多个, 一次只删除一个)
buffer -= 100
println(s"-= 后buffer.size: ${buffer.mkString(", ")}")
//根据下标删除第 n 个元素
buffer.remove(0)
println(s"remove(0) 后buffer.size: ${buffer.mkString(", ")}")
//根据下标删除 -> 从下标为 n 的开始删, 删 c个
buffer.remove(0, 2)
println(s"remove(0, 2) 后buffer.size: ${buffer.mkString(", ")}")
}
运行结果:
buffer.size: 2
buffer.size: 1, 2
:+ 后buffer.size: 1, 2, 100
:+ 后buffer.size: 1, 2, 100, 100
+: 后buffer.size: -100, 1, 2, 100, 100
+= 后buffer.size: -100, 1, 2, 100, 100, 101
insert 后buffer.size: -100, 1, 2, 100, 100, 101, 102
-= 后buffer.size: -100, 1, 2, 100, 101, 102
remove(0) 后buffer.size: 1, 2, 100, 101, 102
remove(0, 2) 后buffer.size: 100, 101, 102
总结:
定长数组:
- 声明方式
- 初始化并指定数组大小
- 初始化并赋值, 数组大小由()中参数个数决定
- 获取数组长度:
arr.length,arr.size :+和=:的区别::+表示在数组的最右边插入指定元素=:表示在数组的最左边插入指定元素
- 当去
修改定长数组时,会生成一个新的数组,并自动的返回(和 Java 中 String 类似)
可变数组:
- 增加数组元素 也可以通过
+=:+=+:=来增加元素, 但是没有:-=-:=来删除元素 -=:只删除第一个碰到的元素
Scala数组详解
本文深入解析Scala中的数组概念,包括定长数组与可变数组的声明、操作及应用场景,对比其特性与使用区别。
215

被折叠的 条评论
为什么被折叠?



