scala中的Set集

32 阅读4分钟

1.Set的定义

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

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

2.Set的代码格式

语法格式 val 变量名 = Set类型

eg:下面看两个例子:

val set1 = Set[Int]()

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

println(set1,set2)

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

3.不可变与可变 Set 的区别

*对于存储学校固定课程的模块,因为课程信息一般是固定不变的,适合用不可变 Set。而学生选课情况可能会随着学生的操作而改变,适合用可变 Set。

不可变Set的例子

import scala.collection.immutable.Set  
// 创建一个不可变 Set 表示学校固定课程  
val fixedCourses: Set[String] = Set("数学", "语文", "英语")  
// 尝试修改不可变 Set(以下代码会编译通过,但不会改变 fixedCourses 的值,而是创建一个新的 Set)  
val newFixedCourses = fixedCourses + "物理"  
println(fixedCourses) // 输出: Set(数学, 语文, 英语)  
println(newFixedCourses) // 输出: Set(数学, 语文, 英语, 物理)

这段代码先创建了一个不可变 Set 表示学校固定课程,当我们尝试添加新元素“物理”时,原 Set 不变,而是生成了一个新的 Set,通过打印展示原 Set 和新 Set 的内容。

来看一个可变的例子

import scala.collection.mutable.Set  
// 创建一个可变 Set 表示学生选课情况

val selectedCourses: mutable.Set[String] = mutable.Set("数学", "体育")  
// 修改可变 Set  
selectedCourses += "美术"  
println(selectedCourses) // 输出: Set(数学, 体育, 美术)

这里创建一个可变 Set 表示学生选课情况,然后使用 += 操作符添加新元素“美术”,并打印出修改后的 Set。

4.Set常见操作

(1).添加元素

代码如下:

import scala.collection.mutable.Set

val libraryBooks: mutable.Set[String] = mutable.Set("Java 编程思想", "数据结构")

libraryBooks += "算法导论"

println(libraryBooks)

此代码创建了一个可变 Set 表示图书馆藏书,使用 += 操作符添加了一本新书“算法导论”,最后打印出添加后的 Set。

对于不可变 Set

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

编写代码如下

import scala.collection.immutable.Set

val activities: Set[String] = Set("运动会", "文艺汇演")

val newActivities: Set[String] = activities + "科技节"

println(newActivities)

这里先创建一个不可变 Set 表示学校活动安排,然后通过创建新 Set 的方式添加新活动“科技节”,并打印新 Set。

(2)删除元素

对于可变 Set,我们可以使用 -= 操作符来删除元素。 代码如下:

import scala.collection.mutable.Set

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

students -= "王五"

println(students)

此代码创建一个可变 Set 表示班级学生名单,使用 -= 操作符删除学生“王五”,并打印出删除后的 Set。

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

(3)添加set

对于不可变Set,可以设置为 val set3 = set1 ++ set2;对于可变Set,可以设置为 set1 ++= set2

代码如下:

import scala.collection.mutable.Set

val set1 = Set("张三", "李四", "王五")

set1 ++= Set("王五")

println(set1)

4.查询元素是否存在

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

代码如下:

import scala.collection.immutable.Set

val clubMembers: Set[String] = Set("小明", "小红", "小刚")

println(clubMembers.contains("小明"))

这段代码创建一个 Set 表示学校社团成员名单,使用 contains 方法检查成员“小明”是否在 Set 中,并打印结果(布尔值)。

5.集合操作-并集

我们可以使用 union 方法得到两个 Set 的并集。

代码如下:

import scala.collection.immutable.Set

val class1Students: Set[String] = Set("赵一", "钱二", "孙三")

val class2Students: Set[String] = Set("孙三", "李四", "周五")

val allStudents: Set[String] = class1Students.union(class2Students)

println(allStudents)

此代码创建两个表示不同班级学生名单的 Set,使用 union 方法求并集,得到所有学生名单的 Set 并打印。

6.集合操作-交集

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

代码如下:

import scala.collection.immutable.Set

val activity1Participants: Set[String] = Set("甲", "乙", "丙")

val activity2Participants: Set[String] = Set("丙", "丁", "戊")

val intersectionParticipants: Set[String] = activity1Participants.intersect(activity2Participants)

println(intersectionParticipants)

这里创建两个表示不同学校活动参与人员名单的 Set,使用 intersect 方法求出同时参加两个活动的人员名单的 Set 并打印。

7.集合操作-差集

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

代码如下:

import scala.collection.immutable.Set

val semester1Courses: Set[String] = Set("语文", "数学", "英语")

val semester2Courses: Set[String] = Set("数学", "物理", "化学")

val differenceCourses: Set[String] = semester1Courses.diff(semester2Courses)

println(differenceCourses)

 

此代码创建两个表示不同学期课程的 Set,使用 diff 方法求出第一个学期课程相对于第二个学期课程的差集并打印。

以下为代码贴图与注意事项

cz.png

kb.png

Snipaste_2025-11-25_08-43-32.png

Snipaste_2025-11-25_08-43-56.png

Snipaste_2025-11-25_10-13-09.png