可变与不可变

6 阅读1分钟
object set02 {
  def main(args: Array[String]): Unit = {
    
    // 可变的set
    val set1 = scala.collection.mutable.Set("apple", "grape", "apple", "pear")
    set1 += "banana"
    println(set1)  // 输出: HashSet(banana, grape, apple, pear)
    
    // 不可变的set
    val course = scala.collection.immutable.Set("apple", "banana")
    // course += "xxxx"  // 这行会编译错误,因为不可变Set不能修改
    val newCourse = course + "pear"  // 创建新的Set
    println(newCourse)  // 输出: Set(apple, banana, pear)
  }
}

输出结果:

text

HashSet(banana, grape, apple, pear)
Set(apple, banana, pear)

关键概念:

可变Set (mutable.Set):

  • 可以原地修改内容
  • 支持 += 操作符
  • 元素可以重复添加(但Set会自动去重)

不可变Set (immutable.Set):

  • 创建后不能修改
  • 使用 + 操作符会返回新的Set
  • 默认的Set就是不可变的
object map02 {
  def main(args: Array[String]): Unit = {
    // 创建可变的Map 键值对
    val scores = scala.collection.mutable.Map("alice" -> 90, "bobi" -> 85)
    
    // 1. 添加
    scores += ("max" -> 100)

    // 2. 删除 alice。删除操作是根据key来做的
    scores -= "alice"

    // 3. 查询。查看bobi的分数,rst 是一个Option类型
    val rst = scores.get("bobi")
    if (rst.isEmpty) {
      println("bobi没有成绩")
    } else {
      println(rst.get)
    }

    // 4. 打印scores
    println(scores)
    
    // for循环遍历
    for ((key, value) <- scores) {
      println(s"${key}, ${value}分")
    }
    
    // foreach遍历
    scores.foreach({
      case (key, value) => println(s"${key}, ${value}分")
    })
  }
}

代码功能说明:

1. 创建可变Map

scala

val scores = scala.collection.mutable.Map("alice" -> 90, "bobi" -> 85)

2. 基本操作

  • 添加scores += ("max" -> 100)
  • 删除scores -= "alice"(根据key删除)
  • 查询scores.get("bobi") 返回 Option[Int]

3. 遍历方式

for循环

scala

for ((key, value) <- scores) {
  println(s"${key}, ${value}分")
}

foreach方法

scala

scores.foreach({
  case (key, value) => println(s"${key}, ${value}分")
})

输出结果:

text

85
Map(bobi -> 85, max -> 100)
bobi, 85分
max, 100分
bobi, 85分
max, 100