Scala的Set集

56 阅读4分钟
0079E2D1.gif

(一)Set的定义

Set,集合:表示没有重复元素的集合,特点是:唯一,无序。

Set 有可变(mutable)和不可变(immutable)两种类型。

不可变 Set 创建后元素不能修改,可变 Set 可对元素进行添加、删除等操作,这两种类型能满足不同场景需求。

(二)Set的代码格式

语法格式 val 变量名 = Set[类型](元素1,元素2...)

下面看两个例子:

val set1 = Set[Int]()

val set2 = Set[String]("apple","dog")

println(set1,set2)

注意:它的元素不能重复,例如 Set(1,1) ==> Set(1)

package set

object set01 {
  def main(args: Array[String]): Unit = {
    val set1 = Set("apple","grape","apple","娜是伊之助!!!")

    println(set1)
  }

}

//运行结果:
Set(apple, grape, 娜是伊之助!!!)

(三)不可变与可变 Set 的区别

可变 (mutable),不可变 (immutable):

  • 可变:自己的内容可以随意修改,可以使用 +=

  • 不可变:自己的内容定义好了,就不能添加,不能删除。

  • 默认使用的是不可变的

  • Set 它是内置函数,不需要 import,可以直接使用。等价于: import scala.collection.immutable.Set

object set02 {
  def main(args: Array[String]): Unit = {
      // 分: 可变,不可变
      // 默认情况下,使用的Set是不可变的。

      // 可变的Set
      val set1 = scala.collection.mutable.Set("apple", "grape", "apple", "pear")
      set1 += "banana"
      println(set1)

      // 不可变的Set
      val course = scala.collection.immutable.Set("apple", "banana")
      // 报错: course += xxx
      var newCourse = course + "pear"
      println(newCourse)
    }
}

//运行结果:
HashSet(banana, apple, pear, grape)
Set(apple, banana, pear)

(四)Set常见操作

1.添加元素

  • 对于可变 Set,我们可以使用 += 操作符来添加元素。

  • 对于不可变 Set,添加元素实际上是创建一个新的 Set。

2.删除元素

  • 对于可变 Set,我们可以使用-=操作符来删除元素。

  • 不可变 Set 没有直接的删除方法,因为它是不可变的,需要重新创建一个新的 Set(类似添加元素)。

3.添加set

4.查询元素是否存在

可以使用 contains 方法来检查元素是否在 Set 中,打印结果是一个布尔值(Bool)

5.集合操作-并集

使用 union 方法得到两个 Set 的并集。

6.集合操作-交集

可以使用 intersect 方法获取两个 Set 的交集。

7.集合操作-差集

使用 diff 方法返回一个 Set 相对于另一个 Set 的差集。

object set03 {
  def main(args: Array[String]): Unit = {

      // 可变的Set
      val set1 = scala.collection.mutable.Set("apple", "grape", "apple", "pear")
      //1.添加元素
      set1 += "banana"
      println(set1)

      //2.删除元素 grape
      set1 -= "grape"

      //3.查询元素是否存在 contains 它返回一个Bool值
      if (set1.contains("apple")){
          println("apple 存在")
      }

      //4.合并 Set union 返回一个新的Set
      val set2 = scala.collection.mutable.Set("orange")

      val set3= set1.union(set2)
      println(set3)

      //5.交集
      val hobby1 = scala.collection.mutable.Set("看书","听歌")
      val hobby2 = scala.collection.mutable.Set("打球","看书")
      //求交集
      val rst = hobby1.intersect(hobby2)
      println(rst)

      //6.差集:一个Set中有,而宁一个没有
      val classes1 = scala.collection.mutable.Set("语文","数学","英语")
      val classes2 = scala.collection.mutable.Set("语文","物理")
      val rst1 = classes2.diff(classes1)
      println(rst1)
     }

}

//运行结果:
HashSet(banana, apple, pear, grape)
apple 存在
HashSet(banana, orange, apple, pear)
HashSet(看书)
HashSet(物理)

实训任务:

图书馆书籍管理系统相关的练习。内容要求:

  1. 创建一个可变 Set,用于存储图书馆中的书籍信息(假设书籍信息用字符串表示,如 “Java 编程思想”“Scala 实战” 等),初始化为包含几本你喜欢的书籍。
  2. 添加两本新的书籍到图书馆集合中,使用 += 操作符。
  3. 从图书馆集合中删除一本书,使用 -= 操作符。
  4. 检查某一本特定的书籍(如 “Python 从入门到实践”)是否在图书馆集合中,使用 contains 方法,并输出结果。
  5. 创建另一个可变 Set,表示另一个图书馆的书籍集合。
  6. 求出两个图书馆书籍集合的并集,使用 union 方法,并输出结果。
  7. 求出两个图书馆书籍集合的交集,使用 intersect 方法,并输出结果。
  8. 求出当前图书馆相对于另一个图书馆的差集,使用 diff 方法,并输出结果
import scala.collection.mutable

object LibManager {
  def main(args: Array[String]): Unit = {
    // 1. 创建可变 Set
    val lib1 = mutable.Set("Java编程", "Scala实战", "算法")
    println("初始书籍: " + lib1)

    // 2. 添加新书
    lib1 += "Python入门"
    lib1 += "C++基础"
    println("添加后: " + lib1)

    // 3. 删除书
    lib1 -= "算法"
    println("删除后: " + lib1)

    // 4. 检查书是否存在
    val checkBook = "Python入门"
    val hasBook = lib1.contains(checkBook)
    println(s"有《$checkBook》吗: $hasBook")

    // 5. 创建第二个图书馆
    val lib2 = mutable.Set("Scala实战", "Python入门", "计算机系统", "设计模式")
    println("第二馆: " + lib2)

    // 6. 并集
    val union = lib1.union(lib2)
    println("并集: " + union)

    // 7. 交集
    val intersect = lib1.intersect(lib2)
    println("交集: " + intersect)

    // 8. 差集
    val diff = lib1.diff(lib2)
    println("差集: " + diff)
  }
}

运行结果如下:

初始书籍: Set(Java编程, Scala实战, 算法)
添加后: Set(Java编程, Scala实战, 算法, Python入门, C++基础)
删除后: Set(Java编程, Scala实战, Python入门, C++基础)
有《Python入门》吗: true
第二馆: Set(Scala实战, Python入门, 计算机系统, 设计模式)
并集: Set(Java编程, Scala实战, Python入门, C++基础, 计算机系统, 设计模式)
交集: Set(Scala实战, Python入门)
差集: Set(Java编程, C++基础)