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 方法求出第一个学期课程相对于第二个学期课程的差集并打印。
以下为代码贴图与注意事项: