package array
// Array: 可变,不可变
// 不可变: scala.Array
// 可变: scala.collection.mutable.ArrayBuffer
object Array01 {
def main(args: Array[String]): Unit = {
// 1. 不可变数组
val arr1 = Array(1, 2, 3)
// arr1 += 4 // 错误!不可变的数组不能添加元素
// 查看不可变数组的内容
println("不可变数组 arr1: " + arr1.mkString("[", ", ", "]"))
// 2. 可变数组
val arr2 = scala.collection.mutable.ArrayBuffer(1, 2, 3)
arr2 += 4 // 可变数组,可以添加元素
// 也可以使用 append 方法
arr2.append(5)
// 查看可变数组的内容
println("可变数组 arr2: " + arr2)
// 3. 更多数组操作示例
println("\n更多数组操作:")
// 访问元素
println("arr2(0) = " + arr2(0))
// 修改元素
arr2(0) = 100
println("修改后 arr2: " + arr2)
// 遍历数组
println("遍历 arr2:")
for (elem <- arr2) {
println("元素: " + elem)
}
// 使用 map 转换
val arr3 = arr2.map(_ * 2)
println("arr2.map(_ * 2) = " + arr3)
}
}
注意:不可变的数组不能添加元素
可变数组,可以添加元素
Scala中可变数组和不可变数组的区别
在Scala中,数组主要分为可变数组和不可变数组两大类,它们在内存使用、性能和使用方式上有显著区别。
1. 定义和创建
不可变数组(Immutable Array)
scala
// 使用 Array 类创建
val immutableArr1 = Array(1, 2, 3) // 最常用方式
val immutableArr2 = new Array[Int](3) // 指定长度,初始化为默认值
val immutableArr3: Array[Int] = Array(1, 2, 3)
可变数组(Mutable ArrayBuffer)
scala
// 需要导入
import scala.collection.mutable.ArrayBuffer
// 使用 ArrayBuffer 类创建
val mutableArr1 = ArrayBuffer(1, 2, 3)
val mutableArr2 = ArrayBuffer.empty[Int] // 空数组
val mutableArr3 = new ArrayBuffer[Int]() // 空数组
2. 主要区别对比表
| 特性 | 不可变数组 (Array) | 可变数组 (ArrayBuffer) |
|---|---|---|
| 导入 | 无需导入,Scala标准库 | 需要导入 scala.collection.mutable.ArrayBuffer |
| 修改元素 | ✔️ 可以修改现有元素 | ✔️ 可以修改现有元素 |
| 增加元素 | ❌ 不能增加元素 | ✔️ 可以增加元素 |
| 删除元素 | ❌ 不能删除元素 | ✔️ 可以删除元素 |
| 内存分配 | 固定大小 | 动态调整大小 |
| 线程安全 | 读取安全 | 多线程操作需要同步 |
| 性能 | 随机访问快,O(1) | 追加平均O(1),需要时扩容 |