Scala中的Map集合


不可变MAP

Map(映射)是一种可迭代的键值对(key/value)结构。
所有的值都可以通过键来获取。
Map 中的键都是唯一的。
Map 也叫哈希表(Hash tables)。
Map 有两种类型,可变与不可变,区别在于可变对象可以修改它,而不可变对象不可以。
默认情况下 Scala 使用不可变 Map。如果你需要使用可变集合,你需要显式的引入 import scala.collection.mutable.Map 类
在Scala中你可以同时使用可变与不可变 Map,不可变的直接使用 Map,可变的使用 mutable.Map.以下实例演示了不可变 Map 的应用:

def main(args: Array[String]): Unit = {

 val p: Map[String, Int] = Map[String, Int](

   "CK" -> 15,

   "PH" -> 25,

   "PW" -> 35

 )

两种获取值的方式

   val values: Option[Int] = p.get("PH")
   println(values.get)
       
   val age :Int  = p.getOrElse("PW",10);
   println(age)
       
  println(p.keys)  //返回所有的key;
  println(p.values)//返回所有的value;
  println(p.isEmpty) //当map为空时,返回true;

可变MAP

  def main(args: Array[String]): Unit = {
    val personalMap  = scala.collection.mutable.Map[String,Int](
      "kw" ->7,
      "dk"->20

    )


    for(kb<-personalMap){
      val key =kb._1;
      val value = kb._2
      println(key+value)

    }
    personalMap.foreach(x=>println(x))

  }
def map3(): Unit ={
  //不可变Map+var关键词修饰例子
  var a:scala.collection.mutable.Map[String,Int]=scala.collection.mutable.Map("k1"->1,"k2"->2)//初始化构造函数
  a += ("k3"->3)//添加元素
  a += ("k4"->4)//添加元素
  a += ("k1"->100)//已经存在添加元素会覆盖
  a += ("k1"->100,"k9"->9)//添加多个元素
  a -= ("k2","k1")//删除元素
  a ++= List("CA" -> 23, "CO" -> 25)//追加集合
  a --= List("AL", "AZ")//删除集合
 
  a.retain((k,v)=> k=="k1")//只保留等于k1元素,其他的删除
  a.put("put1",200)//put
  a.remove("k2")//remove
  a.clear()//清空
  a("k3")=100//支持
 
  println(a.contains("k6"))//是否包含某元素
  println(a.size)//打印大小
  println(a.get("k1").getOrElse("default")) //根据key读取元素,不存在就替换成默认值
  a.foreach{case (e,i) => println(e,i)} //遍历打印1
  for( (k,v)<-a ) println(k,v) //遍历打印2
  println(a.isEmpty)//判断是否为空
  a.keys.foreach(println)//只打印key
  a.values.foreach(println)//只打印value
  a=scala.collection.mutable.Map()//引用能变
  println(a.size)
  a.toSeq.sortBy(_._1)//排序 key
  a.toSeq.sortBy(_._2)//排序 value
  a.toSeq.sortWith(_._1>_._1) //降序排序 key
  a.toSeq.sortWith(_._2>_._2) //降序排序 value
  
      //下面自定义按英文字母或数字排序
  implicit  val KeyOrdering=new Ordering[String] {
    override def compare(x: String, y: String): Int = {
      x.compareTo(y)
    }
  }
  println(a.toSeq.sorted)

文章作者: liming
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 liming !
评论
  目录