Scala基础语法:Set和Map集合-----(5)

本文介绍了Scala中的集合分类,包括不可变和可变的Set与Map。对于Set,它与Java中的特性相似,不包含重复元素且无特定顺序。可变Set需导入`scala.collection.mutable.Set`。Map是键值对的集合,通常默认为不可变,可导入`scala.collection.mutable.Map`来创建可变Map。文章还涵盖了Map的遍历和字符串`s`表达式的拼接方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Scala中集合的分类

Scala。collection。immutable --------不可变的

Scala.collection。mutable--------可变的

set集合

和Java中set几乎一样:元素不重复,元素无排序

​ 分为:可变set 不可变set

是否为可变还是不可变,是取决于导包

scala> val a1=set(1,2,3)   				 //Scala中特别注重首字母大小写,这个问题就是首字母小写形成错误的
<console>:11: error: not found: value set
       val a1=set(1,2,3)
              ^

scala> val a1=Set(1,2,3)  				    //首字母大写,正确写法    但值得注意的是,目前么有导包显示immutable
a1: scala.collection.immutable.Set[Int] = Set(1, 2, 3)   			        //所以Scala中默认集合为不可变集合

scala> a1 + 5         								  //集合添加一个新元素,返回一个新集合,
res0: scala.collection.immutable.Set[Int] = Set(1, 2, 3, 5)

scala> a1               						    //原来的a1集合元素内容没有变
res1: scala.collection.immutable.Set[Int] = Set(1, 2, 3)

scala> val a2= a1 +5       						 //返回一个新集合,也是不可变集合
a2: scala.collection.immutable.Set[Int] = Set(1, 2, 3, 5)

scala> a2
res2: scala.collection.immutable.Set[Int] = Set(1, 2, 3, 5)

scala> val a3 = a1 - 3    				  //删除集合里面的元素,但是a1集合内容还是不变的,只是得到的结果返回个新集合
a3: scala.collection.immutable.Set[Int] = Set(1, 2)

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

scala> val a4 = a1 ++ Set(4,5,6) 							     //添加新集合内容
a4: scala.collection.immutable.Set[Int] = Set(5, 1, 6, 2, 3, 4)

scala> val a5 ++ List(7,8,9)  							 //错误写法,添加新列表   没有赋值等号,跟参数
     | 
     | val a5 ++ List(7,8,9)
<console>:3: error: '=' expected but ';' found.
val a5 ++ List(7,8,9)
^

scala> val a5 = a1 ++ List(7,8,9)  							  //添加新列表的正确格式
a5: scala.collection.immutable.Set[Int] = Set(1, 9, 2, 7, 3, 8)

scala> a1     									 //不管添加,删除   原有的集合内容是不会变的
res4: scala.collection.immutable.Set[Int] = Set(1, 2, 3)

scala> a5      									 //只是把结果返回得到一个新集合
res5: scala.collection.immutable.Set[Int] = Set(1, 9, 2, 7, 3, 8)

可变set:

scala> import scala.collection.mutable.Set 					  //可变set需要导包
import scala.collection.mutable.Set

scala> val a1=Set(1,1,2,2,3,3,4,5,5,6,6,7,8,8,9,9)    			 //设置一个可变set   可以看出来set集合的特点
a1: scala.collection.mutable.Set[Int] = Set(9, 1, 5, 2, 6, 3, 7, 4, 8)      			 //不重复,无序性

scala> val a2 = a1 += 11     						     //可变Set和不可变Set  在添加元素时所有不同  
a2: a1.type = Set(9, 1, 5, 2, 6, 3, 7, 4, 11, 8)

scala> val a3 = a1 -= 9        							   //可变Set和不可变Set  在删除元素时所有不同 
a3: a1.type = Set(1, 5, 2, 6, 3, 7, 4, 11, 8)

scala> a1                         					 //切记,可变set的元素内容回随着添加,删除的变化而变化,
res12: scala.collection.mutable.Set[Int] = Set(1, 5, 2, 6, 3, 7, 4, 11, 8)

Map映射:

Map映射是一推 对偶元组(就是只有两个元素的列表,或者也是kv键值对)的集合

​ 分为:可变Map 不可变Map

默认情况下都是不可变的 而可变Map需要自己手动导包
import scala.collection.mutable.Map

scala> val a1=Map("name"->"DW","age"->"28")  						 //创建map集合第一种格式
a1: scala.collection.immutable.Map[String,String] = Map(name -> DW, age -> 28)

scala> val a2=Map(("name","DW"),("age","28")) 							  //创建map集合第二种格式
a2: scala.collection.immutable.Map[String,String] = Map(name -> DW, age -> 28)

scala> scala.collection.mutable.Map     								 //错误导包方式
res13: collection.mutable.Map.type = scala.collection.mutable.Map$@4250b0c1

scala> import scala.collection.mutable.Map 							  //正确导包方式
import scala.collection.mutable.Map

scala> val a3=Map(("name","kk"),("age","55"))  						   //创建可变map集合
a3: scala.collection.mutable.Map[String,String] = Map(age -> 55, name -> kk)

scala> a1("name")   									  //根据key值求value的值
res14: String = DW

scala> a3("name") 									  //根据key值求value的值
res15: String = kk

scala> a1("name2")  							 //根据kay值求value的值,如果没有这个key值,会报错
java.util.NoSuchElementException: key not found: name2
  at scala.collection.MapLike$class.default(MapLike.scala:228)
  at scala.collection.AbstractMap.default(Map.scala:59)
  at scala.collection.MapLike$class.apply(MapLike.scala:141)
  at scala.collection.AbstractMap.apply(Map.scala:59)
  ... 32 elided
	
scala> a1.get("name")     									 //用get方法取值
res17: Option[String] = Some(DW)
	
scala> a1.get("name2") 									  //如果没有相应的v值,会返回:None
res18: Option[String] = None


   //用getorelse方法,最大好处就是没有相应的key值,会返回自己指定的内容
scala> a1.getOrElse("name","hello")       
res19: String = DW

scala> a1.getOrElse("name2","hello")
res20: String = hello

scala> a1.kays   										 //取所有的key值,注意书写规范
<console>:15: error: value kays is not a member of scala.collection.immutable.Map[String,String]
       a1.kays
          ^

scala> a1.keys 												  //取所有的key值
res22: Iterable[String] = Set(name, age)

scala> a1.values  											  //取所有的value值
res23: Iterable[String] = MapLike(DW, 28)

可变Map的操作:

scala> a3   				 //在上面都a3的内容了     看是不是可变还是不变就看系统提示字符里是mutable还是immutable呢
res24: scala.collection.mutable.Map[String,String] = Map(age -> 55, name -> kk)

scala> a3("name")="city"  									  //修改指定的k值

scala> a3  											  //完成修改后的内容
res26: scala.collection.mutable.Map[String,String] = Map(age -> 55, name -> city)

scala> a3.+=("hobby"->"playball") 							  //添加内容,注意+=在这里相当于方法一样
res27: a3.type = Map(hobby -> playball, age -> 55, name -> city)

scala> a3.+=("city","shanxi")      						 //添加内容,注意+=在这里相当于方法一样(第二种格式)
<console>:15: error: type mismatch; 							  //注意书写规范,上个括号kv的圆括号
 found   : String("city")
 required: (String, String)
       a3.+=("city","shanxi")
             ^
<console>:15: error: type mismatch;
 found   : String("shanxi")
 required: (String, String)
       a3.+=("city","shanxi")
                    ^

scala> a3.+=(("city","shanxi"))                                                   //添加内容,注意+=在这里相当于方法一样(第二种格式)
res29: a3.type = Map(city -> shanxi, hobby -> playball, age -> 55, name -> city)

scala> a3.+=(("city","shanxi"),("hadoop","mapreduce"))                            //也可以添加多个kv值
res30: a3.type = Map(hadoop -> mapreduce, city -> shanxi, hobby -> playball, age -> 55, name -> city)

scala> a3 -=("hobby")     							 //注意在删除k时,-=不是以方法存在的  值得注意一点
res31: a3.type = Map(hadoop -> mapreduce, city -> shanxi, age -> 55, name -> city)

scala> a3.ermove("city")  							 //第二种删除方式  注意书写格式
<console>:15: error: value ermove is not a member of scala.collection.mutable.Map[String,String]
       a3.ermove("city")
          ^

scala> a3.remove("city") 							    //第二种正确的格式
res33: Option[String] = Some(shanxi)

scala> a3    							 //因为是可变map,所以在添加删除修改后,原本的a3Map集合kv内容发生了改变
res34: scala.collection.mutable.Map[String,String] = Map(hadoop -> mapreduce, age -> 55, name -> city)

Map的遍历:

scala> for(i <- a3)println(i)    
(hadoop,mapreduce)
(age,55)
(name,city)

scala> for(k <- a3.keys)println(s"${k}---->${a3(k)}")     //用s表达式插入数据,
hadoop---->mapreduce                                         //如不理解s表达式
age---->55                                                     //可以在基础语法第一讲最后结尾除查看
name---->city                                                     //算了  我还是在下面演示一下吧

scala> for((k,v)<-a3)println(s"$k---->$v")
hadoop---->mapreduce
age---->55
name---->city

s表达式拼接:

//s表达式拼接
scala> val a="hello"
a: String = hello

scala> val b="wangjie"
b: String = wangjie

scala> val c = s"$a---->$b"   
c: String = hello---->wangjie

scala> val d = s"$(a)123  \\wusuiwei//  \\yanggun// 123$(b)" 					 //注意要用{} 花括号
<console>:1: error: invalid string interpolation: `$$', `$'ident or `$'BlockExpr expected
val d = s"$(a)123  \\wusuiwei//  \\yanggun// 123$(b)"
          ^

scala> val d = s"${a}123  \\wusuiwei//  \\yanggun// 123${b}" 					  //正确用法
d: String = hello123  \wusuiwei//  \yanggun// 123wangjie

//一般方式拼接
scala> val e = a+b        
e: String = hellowangjie

scala> val f = a+"---->"+b
f: String = hello---->wangjie

scala> val f1 = a+"aaaaa"+b
f1: String = helloaaaaawangjie

scala> val f1 = a+" aaaaa "+b
f1: String = hello aaaaa wangjie
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值