5、Scala数据结构Set

本文介绍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的一个子集

 

 

 

 

 

 

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值