一、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表示一个整数序列。
下图展示了最重要的可变序列

1030

被折叠的 条评论
为什么被折叠?



