可变数组和不可变数组

29 阅读2分钟
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),需要时扩容