Scala Set(集合)是没有重复的对象集合,所有的元素都是唯一的。
Scala 集合分为可变的和不可变的集合。
默认情况下,Scala 使用的是不可变集合,如果你想使用可变集合,需要引用 scala.collection.mutable.Set 包
var set = Set("a","b","c")
//res0: scala.collection.immutable.Set[String] = Set(a, b, c, d) 生成新的Set
//源码: def + (elem: Any): Set[Any] = new Set1(elem)
set += "d" //增加 因为是不可变 实际是set = set + "b"
//源码:
val set2 = set.drop(1)//减少
println(set2)
//a;b;c set的元素还是原始的
println(set.getClass.getName +":"+set)
引入scala.collection.mutable.Set包
import scala.collection.mutable.Set
//muSet: scala.collection.mutable.Set[String] = Set(c, a, b)
//无序Set
val muSet = Set("a","b","c")
//res2: scala.collection.mutable.Set[String] = Set(c, d, a, b) 在muSet基础上增加
//源码: override def + (elem: A): This = clone() += elem
muSet += "e" // 实际调用的可变Set的+=方法
println(muSet)
muSet.add("d")
muSet.remove("c")
//c:d:a:b set的元素已经改变
println(muSet.getClass.getName +":"+muSet)
println(muSet.head+ " >>返回列表中的第一个元素")
println(muSet.last+ " >>返回列表中的最后一个元素")
println(muSet.init.mkString(",")+ " >>返回除最后一个元素外的所有元素组成的Set")
println(muSet.tail.mkString(",")+ " >>返回Set中除第一个元素外的所有元素组成的Set")
println(muSet.size +">>返回Set大小")
连接集合
//连接集合
//scala.collection.immutable.Set[String]
val set0 = Set("a","b","c")
//scala.collection.immutable.Set[Int]
val set3 = Set(1,2,3)
//++ 作为运算符使用
val set4 = set0 ++ set3
//scala.collection.immutable.Set[Any]
println(set4.getClass.getName + ":" + set4)
// ++ 作为方法使用
val set5 = set0.++(set3)
println(set4.getClass.getName + ":" + set5)
查找集合中最大与最小元素
val num = Set(5,6,9,20,30,45)
// 查找集合中最大与最小元素
println( "Set(5,6,9,20,30,45) 集合中的最小元素是 : " + num.min )
println( "Set(5,6,9,20,30,45) 集合中的最大元素是 : " + num.max )
交集、合并、差集、集合拆分
val num1 = Set(5,6,9,20,30,45)
val num2 = Set(50,60,9,20,35,55)
// 交集
println( "num1.&(num2) : " + num1.&(num2) )
println( "num1.intersect(num2) : " + num1.intersect(num2) )
//合并 不允许重复
println("union:" + num1.union(num2))
//差集 去掉num1在num2中的元素
println("diff:" + num1.diff(num2))
//把集合拆分为两个容器,第一个由前 3 个元素组成,第二个由剩下的元素组成
val num3 = num1.splitAt(3)
println(num3._1)
println(num3._2)