Scala中Map与集合

一、scala中map的简单使用

// 创建一个空的可变map// 在scala中HashMap也分可变和不可变,在使用过程中要注意时导的mutable 还是 immutable包下的HashMapval emptyMap = HashMap[String, Int]()println(emptyMap) // Map()// 定义一个不可变Mapval immutableMap = Map("rock" -> 22, "jason" -> 32)println(immutableMap)// immutableMap("rock") = 33 // immutableMap.type does not take parameters// 创建可变的mapval ages = scala.collection.mutable.Map("rock" -> 20, "jason" -> 33)println(ages)// 对可变map进行修改ages("jason") = 30println(ages)// 获取一个key 33println(ages("jason"))// 获取不存在的key会报异常 Exception in thread "main" java.util.NoSuchElementException: key not found: yxj//    println(ages("jack"))// 可以使用contains方法val jack = if (ages.contains("jack")) ages("jack") else 0println(jack) // ==> 0/** * 更好的方法是使用函数: getOrElse * def getOrElse[B1 >: B](key: A, default: => B1): B1 = get(key) match { * case Some(v) => v * case None => default * } * * 调用该方法时 实际上会根据值进行匹配,匹配不到返回参数中指定的默认值 */val wll = ages.getOrElse("jack", 1)println(wll) // ==> 1// 修改 不可变mapval maps = immutableMap + ("jack" -> 33)println(maps) // 打印 Map(Jim -> 22, yxj -> 33)// 两个map相加val mapss = maps ++ mapsprintln(mapss)// 删除map中值val map = immutableMap - "jack"println(map)// map的遍历,遍历所有的for ((key, value) <- ages) {  println(key + ":" + value)}// 遍历keyfor (key <- ages.keySet) {  println("key=" + key)}// 遍历 valuefor (value <- ages.values) {  println("value=" + value)}/** * 排序 * 定义一个不可变的SortedMap * 在操作映射时,需要选定一个实现(哈希表或者平衡树,默认情况下scala给的是哈希表。 * 由于对使用的键没有很好的哈希函数,或者需要顺序的地访问所有的键, * 如果要得到一个不可变的树形映射而不是哈希映射的话,可以直接使用 immutable.SortedMap */val scores: SortedMap[String, Int] = SortedMap(  "Alice" -> 98,  "Mark" -> 67,  "Bob" -> 82,  "Cindy" -> 59)println(scores)// scala中并没有可变的树形映射,不过可以使用java中的TreeMap,与java进行互操作// 需要引入 import scala.collection.JavaConversions._ 包 可以进行java与scala的相互转换val scalaScores = new util.TreeMap[String,Int]()

 

 

二、Scala中集合

 

所有的集合都扩展于Iterable ,集合分为三大类,分别是序列、集和映射。对于几乎所有的集合类scala都提供了可变和不可变版本。scala列表要么是空的,要么拥有一头一尾,其中尾部本身又是一个列表。集是无先后次序的集合 。使用LinkHashSet来保留插入顺序,或者用SortedSet来按顺序进行迭代

 

    我们以一张图来展示构成Scala集合继承层级最重要的特质

 

scala同时支持可变和不可变的集合,不可变的集合从不改变,因此可以完全安全地共享其引用,甚至在一个多线程的应用程序中也没有问题。举例来说,即有scala.collection.immutable.Map,也有scala.collection.mutable.Map。他们有一个共有的超类 scala.collection.Map (这个类没有定义任何的改值操作)。

scala优先采用不可变集合,scala.collection包中的伴生对象产出不可变的集合。

 

序列

下图展示了最重要的不可变序列

Vector是ArrayBuffer不可变的版本,一个带下标的的序列,​支持快速随机访问。

Range表示一个整数序列。

 

   下图展示了最重要的可变序列

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值