(一)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(物理)
实训任务:
图书馆书籍管理系统相关的练习。内容要求:
- 创建一个可变 Set,用于存储图书馆中的书籍信息(假设书籍信息用字符串表示,如 “Java 编程思想”“Scala 实战” 等),初始化为包含几本你喜欢的书籍。
- 添加两本新的书籍到图书馆集合中,使用 += 操作符。
- 从图书馆集合中删除一本书,使用 -= 操作符。
- 检查某一本特定的书籍(如 “Python 从入门到实践”)是否在图书馆集合中,使用 contains 方法,并输出结果。
- 创建另一个可变 Set,表示另一个图书馆的书籍集合。
- 求出两个图书馆书籍集合的并集,使用 union 方法,并输出结果。
- 求出两个图书馆书籍集合的交集,使用 intersect 方法,并输出结果。
- 求出当前图书馆相对于另一个图书馆的差集,使用 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++基础)