目录
2)对两个set集合进行合并 ++ 【需要新的set集合接收】
set集合有两个显著的特点:①无序;②去重【元素不重复】
set集合也分为可变和不可变两种,并且set集合还有一种特殊的集合HashSet。
在Java中set集合其实就是个接口,它本身不能直接new创建出来一个set集合对象,而是得使用其下的子类,来实例化一个集合对象。如:HashSet,SortedSet等,这篇文章中我们就只了解Scala中的Set和HashSet集合。
格式:val/var 变量名 =Set(x1,x2,....)
- scala> val set1=Set(1,2,3)
- set1: scala.collection.immutable.Set[Int] = Set(1, 2, 3)
对于不可变的set来说,我们对它的任何操作都不会生效。只能使用一个新的set集合进行接收。
如向set集合中添加元素的+函数,两个set集合进行拼接的函数++等都不会对原集合产生影响。
- scala> set1
- res9: scala.collection.immutable.Set[Int] = Set(1, 2, 3)
-
- scala> set1 + 5
- res10: scala.collection.immutable.Set[Int] = Set(1, 2, 3, 5)
-
- scala> set1
- res11: scala.collection.immutable.Set[Int] = Set(1, 2, 3)
能够添加一个元素,也就可以添加多个元素,如下,我们向set1集合中添加7,8,9三个元素:
- scala> set1
- res11: scala.collection.immutable.Set[Int] = Set(1, 2, 3)
-
- scala> set1 + (7,8,9)
- res12: scala.collection.immutable.Set[Int] = Set(1, 9, 2, 7, 3, 8)
-
- scala> set1
- res13: scala.collection.immutable.Set[Int] = Set(1, 2, 3)
使用++函数并不会对原来的set集合产生任何影响,如果想要使用合并后的set集合结果的话可以使用一个变量就行存储。
- scala> val set2 =Set(10,11,12)
- set2: scala.collection.immutable.Set[Int] = Set(10, 11, 12)
-
- scala> set1
- res14: scala.collection.immutable.Set[Int] = Set(1, 2, 3)
-
- scala> set2
- res15: scala.collection.immutable.Set[Int] = Set(10, 11, 12)
-
- scala> set1 ++ set2
- res16: scala.collection.immutable.Set[Int] = Set(10, 1, 2, 12, 3, 11)
-
- scala> set1
- res17: scala.collection.immutable.Set[Int] = Set(1, 2, 3)
在学习Java的时候相信大家还有点印象,就是set集合其实是一个接口,我们不直接使用Set类new实例化一个集合对象,而是使用它的实现类来创建对象,HashSet集合就是Set集合接口下的其中一个实现类。它的使用和Set集合一样,但是在声明的时候,我们需要导入相关的包:
import scala.collection.immutable.HashSet
- scala> import scala.collection.immutable.HashSet // 导入创建不可变hashset集合所需要的包
- import scala.collection.immutable.HashSet
-
- scala> val set_hashset=HashSet(1,2,3)
- set_hashset: scala.collection.immutable.HashSet[Int] = Set(1, 2, 3) // 创建不可变的hashset集合
之后我们像Set集合那样向HashSet集合中添加元素或者是对两个hashset集合进行拼接,效果都会和set集合一样:
- scala> set_hashset
- res3: scala.collection.immutable.HashSet[Int] = Set(1, 2, 3)
-
- scala> set_hashset + 10 // 向hashset集合中添加一个元素10
- res4: scala.collection.immutable.HashSet[Int] = Set(10, 1, 2, 3)
-
- scala> set_hashset //
- res5: scala.collection.immutable.HashSet[Int] = Set(1, 2, 3)
唯一不同的就是HashSet可以位于两种不同的包下,一个是immutable(不易变)包下为不可变的hashset集合,另外一个是在mutable(易变)包下为可变的hashset集合。我们需要的就是这个位于易变包mutable下的HashSet集合。接下来我们去进一步了解可变的HashSet集合。
需要注意的是,如果我们之前已经导入了一个位于不易变包下的不可变HashSet,再去导入易变包下的可变HashSet集合,并想要创建一个可变的HashSet集合,那么这个时候就会报错【当我在cmd命令行中运行这些代码的时候没有报错】:
- scala> import scala.collection.immutable.HashSet
- import scala.collection.immutable.HashSet
-
- scala> import scala.collection.mutable.HashSet
- import scala.collection.mutable.HashSet
-
- scala> val set_hashset=HashSet(1,2,3) // 默认使用可变的HashSet来创建集合
- set_hashset: scala.collection.mutable.HashSet[Int] = Set(1, 2, 3)
-
- scala> val set_hashset1=new HashSet[Int] // 动态创建HashSet集合,程序并不知道我们使用的是可变还是不可变的HashSet
- set_hashset1: scala.collection.mutable.HashSet[Int] = Set()
-
- scala>
这个时候我们就需要使用到idea:
- /**
- * @author:码到成龚
- * my motoo:"听闻少年二字,应与平庸相斥。"
- */
- import scala.collection.immutable.HashSet // 导入不可变的hashset
- import scala.collection.mutable.HashSet // 导入可变的hashset
- object TestSet1 {
- // 测试HashSet集合
- def main(args: Array[String]): Unit = {
- val set_hashset=HashSet(1,2,3) // 静态创建一个hashset集合
- val set_hashset1=new HashSet[Int] // 动态创建一个hashset集合
- }
- }
如上,我们可以发现,在idea上如果同时导入了mutable包和immutable包时,去使用new实例化hashset集合,我们的idea编译器就会直接报错,这种在运行前就报错称为编译时异常。
因为程序并不知道我们使用的HashSet用得是mutable包下的,还是immutable包下的。所以我们在导入的时候还得需要对导入的HashSet进行起别名操作:
- /**
- * @author:码到成龚
- * my motoo:"听闻少年二字,应与平庸相斥。"
- */
- import scala.collection.immutable.{HashSet => HashSetIm} // 导入不可变的hashset,并起别名
- import scala.collection.mutable.HashSet // 导入可变的hashset
- object TestSet1 {
- // 测试HashSet集合
- def main(args: Array[String]): Unit = {
- val set_hashset=HashSet(1,2,3) // 静态创建一个hashset集合
- val set_hashset1=new HashSet[Int] // 动态创建一个hashset集合
- }
- }
如上,我们再去创建hashset集合时就不会有报错。
可变hashset集合使用+=函数能够直接改变该集合的元素的组成:在hashset集合中的元素位置为hashset集合的长度都会改变,如下:
- scala> set_hashset // 动态创建的hashset集合
- res0: scala.collection.mutable.HashSet[Int] = Set(1, 2, 3)
-
- scala> set_hashset1 // 静态创建的hashset集合
- res1: scala.collection.mutable.HashSet[Int] = Set()
-
- scala> set_hashset+=(7,8,9) // 向hashset集合中添加元素
- res2: set_hashset.type = Set(9, 1, 2, 3, 7, 8)
-
- scala> set_hashset1+=(7,8,9)
- res3: set_hashset1.type = Set(9, 7, 8)
-
- scala> set_hashset // 查看添加元素之后的hashset集合中元素是否有增多
- res4: scala.collection.mutable.HashSet[Int] = Set(9, 1, 2, 3, 7, 8)
-
- scala> set_hashset1
- res5: scala.collection.mutable.HashSet[Int] = Set(9, 7, 8)
-=函数和+=函数类似:
- scala> set_hashset1 // 修改前的hashset集合
- res5: scala.collection.mutable.HashSet[Int] = Set(9, 7, 8)
-
- scala> set_hashset1 -=(8,9) // 从hashset集合中删除两个元素8和9
- res6: set_hashset1.type = Set(7)
-
- scala> set_hashset1 // 修改之后的hashset集合
- res7: scala.collection.mutable.HashSet[Int] = Set(7)
add函数不像可变数组,可变列表那样的append函数可以一次性加入多个元素,也没有insert函数可以使用,但是就set集合本身来说它的特点:不可重复,在我们编写代码的过程中有很大的作用。add函数不管添加成功与否,返回的结果只有true或false,表示添加成功或者是失败:
- scala> set_hashset1
- res10: scala.collection.mutable.HashSet[Int] = Set(7, 4)
-
- scala> set_hashset1.add(10) // add函数一次性只能够添加一个元素
- res11: Boolean = true // add函数只会返回两种值,true或者是false,添加成功为true,反之false
-
- scala> set_hashset1
- res12: scala.collection.mutable.HashSet[Int] = Set(10, 7, 4)
因为set集合是没有索引的,所以我们在使用remove函数对集合中的元素进行删除处理的时候不能向remove函数中传入索引,而是指定的单个元素值:
- scala> set_hashset1
- res12: scala.collection.mutable.HashSet[Int] = Set(10, 7, 4)
-
- scala> set_hashset1.remove(10) // 该函数只能够删除一个元素(指定的元素值)
- res13: Boolean = true // remove函数和add函数一样只能返回两种结果
-
- scala> set_hashset1
- res14: scala.collection.mutable.HashSet[Int] = Set(7, 4)
++=和+=函数的作用一样,都是向集合中添加元素,但是++=函数可以用于同类序列之间的拼接,而+=函数是无法实现的:
- scala> val set_set=Set(66,77,88) // 创建一个不可变set集合
- set_set: scala.collection.immutable.Set[Int] = Set(66, 77, 88)
-
- scala> set_hashset1 // 查看可变hashset集合中的元素
- res16: scala.collection.mutable.HashSet[Int] = Set(7, 4)
-
- scala> set_hashset1 ++= set_set // 将两个集合进行拼接
- res17: set_hashset1.type = Set(66, 88, 7, 4, 77)
-
- scala> set_hashset1 // 查看拼接后的集合
- res18: scala.collection.mutable.HashSet[Int] = Set(66, 88, 7, 4, 77)
--=和++=函数类似:
- scala> set_hashset1 // 修改之前的hashset集合
- res19: scala.collection.mutable.HashSet[Int] = Set(66, 88, 7, 4, 77)
-
- scala> set_hashset1 --= set_set // set_hashset1集合中减掉set_set集合中的元素
- res20: set_hashset1.type = Set(7, 4)
-
- scala> set_hashset1 // 修改之后的hashset集合
- res21: scala.collection.mutable.HashSet[Int] = Set(7, 4)
-
- scala> set_set // set_set集合中的元素
- res22: scala.collection.immutable.Set[Int] = Set(66, 77, 88)
- scala> set1.size
- res2: Int = 3
-
- scala> set1
- res3: scala.collection.immutable.Set[Int] = Set(1, 2, 3)
- scala> set1
- res4: scala.collection.immutable.Set[Int] = Set(1, 2, 3)
-
- scala> set1.head
- res5: Int = 1
- scala> set1
- res6: scala.collection.immutable.Set[Int] = Set(1, 2, 3)
-
- scala> set1.tail
- res7: scala.collection.immutable.Set[Int] = Set(2, 3)