本文介绍Scala中的Set数据结构。
1、基本知识
Scala中Set存储的元素类型都是相同的、并且元素是唯一的。
Scala中List可以存储重复的元素,但是Set中的元素都是唯一的、不重复的。
Set有可变的、不可变的两种类型。 默认的是不可变的。
如果要使用可变的Set,需要导入包名
//in scala
import scala.collection.mutable.Set
2、Set的定义/声明方法
2.1 定义不可变的Set
//1、定义不可变的Set
val country = Set("Russia", "Denmark", "Sweden")
println(country)
//2、定义不可变的空的Set
var age = Set()
println(age)
2.2 定义可变的Set
//1、定义一个可变的Set
var id1 = scala.collection.mutable.Set[Int](4,5,6,7,8,9)
println(id1)
//2、定义一个可变的空的Set
var id0 = scala.collection.mutable.Set[Int]()
println(id0)
3、Set上的基本操作
Set.head 返回set中第一个元素,这是一个元素
Set.tail 返回set中除了第一个元素外的其他所有元素,这还是一个set
Set.isEmpty 判断集合set是不是空的
Set.min方法查找集合中的最小元素
Set.max 方法查找集合中的最大元素
//in scala
object Test {
def main(args: Array[String]) {
val num1 = Set(125,45,678,34,20,322,10)
val num2 = Set(125,45,678,34,20,322,10,123)
//集合是否为空判断
println(num1.isEmpty)
//集合长度大小
println(num1.size)
//集合元素查找
println(num1.head) //是10, 并不是125。这里的顺序到底是怎样的?
println(num1.last) //这里显示的最后一个元素 和声明时的并不一样。为什么 是322 不是10?
println(num1.tail)
println(num1.min)
println(num1.max)
//集合元素运算
println(num1.product)
println(num1.sum)
//Set数据类型转成其他数据类型
println(num1.toList)
println(num1.toSeq) //ArrayBuffer
println(num1.toArray)
println(num1.mkString) //将set中的数据用一个string展示。这里string的顺序也不是声明的元素的顺序,为什么?
//子集合判断
println(num1.subsets())
println(num1.subsetOf(num2)) //判断集合num1是不是集合num2的一个子集
//元素包含判断
println(num1.contains(35)) //判断集合中是否包含某个元素
println(num1.contains(45)) //判断集合中是否包含某个元素
}
}
4、拼接两个Set
操作符++ 或者 Set.++() 方法可以用来拼接两个Set。两者功能完全相同。
因为Set集合中的元素都是唯一的,所以拼接后的结果set会移除掉拼接前的重复项。
object Test {
def main(args: Array[String]) {
val furniture_1 = Set("Sofa", "Table", "chair","Toby")
val furniture_2 = Set("Bed", "Door","Toby")
var furniture = furniture_1 ++ furniture_2 //使用操作符 ++
println( "furniture_1 ++ furniture_2 : " + furniture )
var furn = furniture_1.++(furniture_2) //使用方法 .++
println( "furniture_1.++(furniture_2) : " + furn )
}
}
5、查看两个Set中的公共元素集
操作符Set.&() 或者 Set.intersect() 方法可以用来查找两个Set中的公共元素
object Test {
def main(args: Array[String]) {
val n1 = Set(11,45,67,78,89,86,90)
val n2 = Set(10,20,45,67,34,78,98,89)
println( "n1.&(n2) : " + n1.&(n2) ) //使用操作符&取两个set的公共元素
println( "n1.intersect(n2) : " + n1.intersect(n2) ) //使用方法名intersect取两个set的公共元素
}
}
6、查看集合中是否包含某个元素
Set.contains()方法用来查看集合中是否包含某个元素
//in scala
val num1 = Set(125,45,678,34,20,322,10)
println(num1.contains(35)) //判断集合中是否包含某个元素
println(num1.contains(45)) //判断集合中是否包含某个元素
7、判断一个集合是不是另一个集合的子集
Set.subsetOf() 方法用来判断一个集合是不是另一个集合的子集合
//in scala
val num1 = Set(125,45,678,34,20,322,10)
val num2 = Set(125,45,678,34,20,322,10,123)
println(num1.subsetOf(num2)) //判断集合num1是不是集合num2的一个子集