Scala 集合:Set API
Set 用于表示一个不包含重复元素的集合,不强调元素的顺序性。Set 同样被定义为是一个特质类型,区分可变与不可变,定义如下:
1 | trait Set[A] extends (A => Boolean) |
一. 插入操作
1.1 +
函数 +
用于往 Set 对象中添加一个或多个元素,其定义如下:
1 | def + (elem: A): This |
示例:
1 | val set = Set(1, 2, 3) |
1.2 ++ & ++:
函数 ++
接收一个 GenTraversableOnce 类型的参数,只要是继承自 GenTraversableOnce 的集合都可以作为参数,函数会将参数中所包含的元素添加到原 Set 对象中,并创建一个新的 Set 对象返回。示例:
1 | val set = Set(1, 2, 3) |
函数 ++:
相对于 ++
的区别在于右结合,所以上面的示例对应的结果类型是 List。
1.3 += & ++= & add
对于可变集合而言,可以实现原地插入,函数 +=
对标 +
,而 ++=
则对标 ++
,示例:
1 | val mset = mutable.Set(1, 2, 3) |
函数 add 同样适用于可变 Set 对象,用于往 Set 对象中添加单个元素,如果 Set 中已经包含该元素则返回 false,否则返回 true。示例:
1 | val mset = mutable.Set(1, 2, 3) |
二. 更新操作
2.1 update
对于可变集合来说,函数 update 用于更新集合中的元素(定义如下),其中参数 elem 对应需要更新的元素值,而参数 included 则用于指定是添加(included = true
)还是删除(included = false
)。
1 | def update(elem: A, included: Boolean) |
示例:
1 | val set = mutable.Set(1, 2, 3) |
其中 set.update(0, included = true)
可以简写为 set(0) = true
,set.update(0, included = false)
可以简写为 set(0) = false
。
三. 删除操作
3.1 - & --
函数 -
用于从 Set 对象中移除一个或多个元素,而函数 --
则接收一个 GenTraversableOnce 类型参数,只要是继承自 GenTraversableOnce 的集合都可以作为参数,函数会从原 Set 对象中移除参数集合中所包含的元素。示例:
1 | val set = Set(1 to 9: _*) |
3.2 -= & --=
对于可变集合而言,可以实现原地删除,函数 -=
对标 -
,而 --=
则对标 --
,示例:
1 | val mset = mutable.Set(1 to 9: _*) |
3.3 remove & retain & clear
函数 remove 用于从 Set 中移除单个元素,如果对应的元素存在则返回 true,否则返回 false;函数 retain 接收一个谓词 A => Boolean
,用于移除所有不满足条件的元素;函数 clear 则用于清空所有元素。示例:
1 | val mset = mutable.Set(1 to 9: _*) |
四. 包含检查
4.1 contains & apply
函数 contains 用于检查 Set 对象中是否包含指定的元素,这是一个从父特质继承而来的方法,对于 Set 来说,可以使用 apply 函数检查是否包含指定元素,同样,函数 apply 可以使用 ()
简写。示例:
1 | val set = Set(1, 2, 3) |
4.2 subsetOf
函数 subsetOf 用于检查当前 Set 对象是否是参数给定的 Set 的子集,示例:
1 | val set = Set(1, 2, 3) |
五. 集合操作
5.1 intersect & &
函数 intersect 用于对于两个 Set 对象求 交集 ,也可以简写为 &
,示例:
1 | val set1 = Set(1, 2, 3) |
5.2 union & |
函数 union 用于对于两个 Set 对象求 并集 ,也可以简写为 |
,示例:
1 | val set1 = Set(1, 2, 3) |
5.3 diff & &~
函数 diff 用于对两个 Set 对象求 差集 ,也可以简写为 &~
,示例:
1 | val set1 = Set(1, 2, 3) |