Scala集合之Set与Map

一、Set

Set默认为不可变、无序、无重复项的集合;可变Set需要引入scala.collection.mutable.Set包
Set直接创建即可Set/scala.collection.mutable.Set(),也可以直接输出集合形式

1、不可变Set
object Main extends App {
    //创建,输出是无序的
    val set = Set(1,3,2,5)
    println("set:" + set)
    
    //添加,无序集合,所以添加元素的位置是可变的,不需要规定首位等位置
    val set1 = set + 6 + 8
    println("set1:" + set1)
    
    //删除
    val set2 = set - 3 - 1
    println("set2:" + set2)
    
    //合并集合
    val set3 = set ++ set1 //合并时会自动去重
    println("set3:" + set3) 
    
    val set4 = set3 -- set
    println("set4:" + set4) 
}
set:Set(1, 5, 2, 3)
set1:Set(1, 5, 2, 6, 3, 8)
set2:Set(5, 2)
set3:Set(1, 5, 2, 6, 3, 8)
set4:Set(6, 8)
2、可变Set
object Main extends App {
    import scala.collection.mutable._
    //创建可变集合
    val set1 = Set(0,6)
    println("set1:" + set1)
    val set = scala.collection.mutable.Set(1,3,2,5)
    println("set:" + set)
    
    //添加
    set += 6 += 8
    println("set新增:" + set)
    set.add(9)
    println("set新增:" + set)
    
    //删除
    set -= 3 -= 1
    println("set删除:" + set)
    set.remove(9)
    println("set删除:" + set)
    
    //合并集合
    set ++= set1
    println("set合并set1:" + set) 
    
    set --= set1 //set1里没有set的元素时,不减
    println("set合并set1:" + set) 
}
set1:Set(0, 6)
set:Set(1, 5, 2, 3)
set新增:Set(1, 5, 2, 6, 3, 8)
set新增:Set(9, 1, 5, 2, 6, 3, 8)
set删除:Set(9, 5, 2, 6, 8)
set删除:Set(5, 2, 6, 8)
set合并set1:Set(0, 5, 2, 6, 8)
set合并set1:Set(5, 2, 8)

二、Map

Map是键值对的集合,也分为不可变和可变。创建直接用 Map/scala.collection.mutable.Map() 即可。
Map.get(“key”) / Map(“key”) 访问Map里的某个键对应的值。这个返回有两个结果,若key存在,则返回Some(),否则返回None。若想要直接返回值,则需再调用一次get方法,Map.get(“key”).get
但None是不能调用get函数的,所以建议直接返回值的话,使用Map.getOrElse(“key”,0),即将key不存在的值返回为0。

1、不可变Map
object Main extends App {
    //创建不可变集合
    val map = Map("a" -> 1,"b" -> 2,"c" -> 3)
    println(map)
    println(map.getClass)
    
    //访问指定键对应的值
    println("a:" + map.get("a").get)
    println(map.get("b"))
    println("d:" + map.get("d")) //返回None
    println("d:" + map.getOrElse("d",0)) //返回0
    
    //访问所有键、值
    for (i <- map.keys){
        println(i + ":" + map.getOrElse(i,0))
        println(i + ":" + map.get(i))
    }
        
    //增加
    val map1 = map + (("d",4)) + (("e",5))
    println("map1:" + map1)
    
    //删除
    val map2 = map1 - "e"
    println("map2:" + map2)
    
    //合并
    val map3 = map ++ map1
    println("map合并map1:" + map3)
}
Map(a -> 1, b -> 2, c -> 3)
class scala.collection.immutable.Map$Map3
a:1
Some(2)
d:None
d:0
a:1
a:Some(1)
b:2
b:Some(2)
c:3
c:Some(3)
map1:Map(e -> 5, a -> 1, b -> 2, c -> 3, d -> 4)
map2:Map(a -> 1, b -> 2, c -> 3, d -> 4)
map合并map1:Map(e -> 5, a -> 1, b -> 2, c -> 3, d -> 4)
2、可变Map
object Main extends App {
    import scala.collection.mutable._
    //创建不可变集合
    val map = scala.collection.mutable.Map("a" -> 1,"b" -> 2,"c" -> 3)
    println(map)
    println(map.getClass)
    
    //新增
    map.put("d",4)
    println(map)
    map += (("e",5)) += (("f",6))
    println(map)
    
    //删除
    map -= "f" -= "d"
    println(map)
    map.remove("e")
    println(map)
    
    //修改
    map("a") = 8 //存在时修改
    println("修改a:" + map("a"))
    map("g") = 9 //不存在时新增
    println("新增g:" + map)
    map.update("c",7)
    println("修改c:" + map("c"))
    
    //集合合并
    val map1 = Map("ac" -> 2,"bc" -> 3,"c" -> 5)
    map ++= map1 //map1的键值对覆盖插入map中
    println("map合并map1:" + map)
    
    //访问指定键对应的值
    println("a:" + map.get("a").get)
    println("b:" + map.get("b"))
    println("c:" + map("c"))
    println("d:" + map.get("d")) //返回None
    println("d:" + map.getOrElse("d",0)) //返回0
    
    //访问所有键、值
    for (i <- map.keys){
        println(i + ":" + map.getOrElse(i,0))
        println(i + ":" + map.get(i))
    }
}
Map(b -> 2, a -> 1, c -> 3)
class scala.collection.mutable.HashMap
Map(b -> 2, d -> 4, a -> 1, c -> 3)
Map(e -> 5, b -> 2, d -> 4, a -> 1, c -> 3, f -> 6)
Map(e -> 5, b -> 2, a -> 1, c -> 3)
Map(b -> 2, a -> 1, c -> 3)
修改a:8
新增g:Map(b -> 2, g -> 9, a -> 8, c -> 3)
修改c:7
map合并map1:Map(b -> 2, ac -> 2, g -> 9, a -> 8, c -> 5, bc -> 3)
a:8
b:Some(2)
c:5
d:None
d:0
b:2
b:Some(2)
ac:2
ac:Some(2)
g:9
g:Some(9)
a:8
a:Some(8)
c:5
c:Some(5)
bc:3
bc:Some(3)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值