Scala008--Scala中的数据结构【集合】

本文详细介绍了Scala中的Set集合,包括不可变Set的声明、添加元素和合并操作,不可变HashSet的创建,以及可变HashSet的常用函数,如添加、删除元素和集合拼接。此外,还讲解了set集合的通用函数,如size、head和tail。通过实例展示了各种操作及其特点,强调了Scala中集合操作的不可变性和HashSet的变与不变。
摘要由CSDN通过智能技术生成

目录

一,概述

二,set的声明

1,不可变set集合

1)向不可变集合中添加元素    + 【需要新的set集合接收】

2)对两个set集合进行合并   ++   【需要新的set集合接收】

2,不可变的HashSet集合

2,可变HashSet集合

1)可变HashSet集合常用函数

①使用+=函数向集合中添加元素

②使用-=函数从集合中删除元素

③使用add函数向集合中添加元素

③使用remove函数从集合中删除元素

④使用 ++=函数将两个同类序列进行拼接 

⑤使用  --=函数将两个同类序列进行拼接

三,set集合的通用函数

1,查看集合中的元素个数    size

 2,获取set集合中的第一个元素   head

 3,获取set集合中除第一个之外的其他元素    tail


一,概述

set集合有两个显著的特点:①无序;②去重【元素不重复】

set集合也分为可变和不可变两种,并且set集合还有一种特殊的集合HashSet。

在Java中set集合其实就是个接口,它本身不能直接new创建出来一个set集合对象,而是得使用其下的子类,来实例化一个集合对象。如:HashSet,SortedSet等,这篇文章中我们就只了解Scala中的Set和HashSet集合。

二,set的声明

1,不可变set集合

格式: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集合进行拼接的函数++等都不会对原集合产生影响。

1)向不可变集合中添加元素    + 【需要新的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)

2)对两个set集合进行合并   ++   【需要新的set集合接收】

使用++函数并不会对原来的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)

2,不可变的HashSet集合

在学习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集合。

2,可变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集合时就不会有报错。

1)可变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函数向集合中添加元素

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)

③使用remove函数从集合中删除元素

因为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)

三,set集合的通用函数

1,查看集合中的元素个数    size

scala> set1.size
res2: Int = 3

scala> set1
res3: scala.collection.immutable.Set[Int] = Set(1, 2, 3)

 2,获取set集合中的第一个元素   head

scala> set1
res4: scala.collection.immutable.Set[Int] = Set(1, 2, 3)

scala> set1.head
res5: Int = 1

 3,获取set集合中除第一个之外的其他元素    tail

scala> set1
res6: scala.collection.immutable.Set[Int] = Set(1, 2, 3)

scala> set1.tail
res7: scala.collection.immutable.Set[Int] = Set(2, 3)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值