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)