scala中的set(集)

49 阅读4分钟

Set的定义

Set,集合表示没有重复元素的集合,有可变(mutable)和不可变(immutable)两种类型。不可变 Set 创建后元素不能修改,可变 Set 可对元素进行添加、删除等操作,这两种类型能满足不同场景需求

Set的代码格式

语法格式:

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

package luwenzhen01

object luxiaozhen {
  def main(args: Array[String]): Unit = {
    //定义一个set
    val set1=Set("小珍","是","大笨蛋!!!")
    println(set1)
  }
}

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

不可变与可变 Set 的区别

  • 可变(mutable),不可变(immutable)
  • 可变:自己的内容可以直接修改。可以使用 +=
  • 不可变:自己的内容定义好了,就不能添加,不能删除。
  • Set 它是内置对象等价于 <=>import .collection.immutable.Set
package luwenzhen01
/*
* 可变(mutable),不可变(immutable)
*   可变:自己的内容可以直接修改。可以使用 +=
*   不可变:自己的内容定义好了,就不能添加,不能删除。
*   默认使用的是 不可变的。
* Set 它是内置对象,不需要import,可以直接使用。等价于 import scala.collection.immutable.Set
*
*/
object luxiaozhen {
  def main(args: Array[String]): Unit = {
    // 分: 可变set, 不可变
    // 默认情况下,使用的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 += "xxxx"
    var newCourse = course + "pear"

    println(newCourse)
  }
}

Set常见操作

1.添加元素

对于可变 Set

我们可以使用 += 操作符来添加元素

import scala.collection.mutable.Set
val libraryBooks: mutable.Set[String] = mutable.Set("Java 编程思想", "数据结构")
libraryBooks += "算法导论"
println(libraryBooks) 

对于不可变 Set

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

import scala.collection.immutable.Set
val activities: Set[String] = Set("运动会", "文艺汇演")
val newActivities: Set[String] = activities + "科技节"
println(newActivities) 

2.删除元素

对于可变 Set

我们可以使用 -= 操作符来删除元素

import scala.collection.mutable.Set
val students: mutable.Set[String] = mutable.Set("张三", "李四", "王五")
students -= "王五"
println(students) 

不可变 Set

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

3.查询元素是否存在

可以使用 contains 方法来检查元素是否在 Set

import scala.collection.immutable.Set
val clubMembers: Set[String] = Set("小明", "小红", "小刚")
println(clubMembers.contains("小明")) 

set操作的完整代码

package xiaozhen01

/*
* set的操作
* 1.添加元素
* 2.删除元素
*3.查询元素是否存在
* 4.合并set
* 5.交集
* 6.差集
*/
object xiaozhen {
  def main(args: Array[String]): Unit = {

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

    //2.删除元素grape
    set1-="grape"
    //3.查询元素是否存在contains  他返回一个bool值
    if(set1.contains("apple")){
      println(set1)
    }
    //4.合并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)

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

实训任务:

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

  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++基础)