注意:通常我们在创建一个集合时会用val这个关键字修饰一个变量(相当于java中的final),那么就意味着该变量的引用不可变,该引用中的内容是不是可变,取决于这个引用指向的集合的类型。
1. 映射 Map
Map分为可变map和不可变Map 默认情况下是不可变Map
不可变Map不能添加、修改、删除键值对p
定义格式:
val m1 = Map(k1 -> v1,k2 -> v3,k3 -> v3)
val m2 = Map((k1,v1),(k2,v2),(k3,v3))
获取值:(可变Map和不可变Map都适用)
m1(k1) = v1
m1.get(k1) = v1
m1.getOrElse(k1,默认值) 通过key获取value,有key对应的值则返回,没有就返回默认值
m1.keySet
m1.Keys
可变Map:
手动导包**import scala.collection.mutable.Map
元素值的修改:
m1(k1) = 新k
m1 += (键->新值, 键->新值, …)
增加元素
m1 += (k3->v3)
m1 += ((k3,v3))
删除元素:只需要指定key就可以
m1 -= (k1)
m1.remove(k1)
Map遍历:
for(i <- m1.keys) println(i + “—” + m1(i))
for(i <- m1.keySet) println(i + “—” + m1(i))
for((x,y) <- m1) println(x + “—” + y) 模式匹配遍历 重点掌握
m1.foreach{case(x,y) => println(x + “—” + y)}
案例:
- 不可变 Map
scala> val m1 = Map("name"->"zoie","age"->20)
m1: scala.collection.immutable.Map[String,Any] = Map(name -> zoie, age -> 20)
scala> val m2 = Map(("name","zoie"),("age",20))
m2: scala.collection.immutable.Map[String,Any] = Map(name -> zoie, age -> 20)
scala> m1.get("age")
res112: Option[Any] = Some(20)
scala> m1("age")
res113: Any = 20
scala> m1("age")=30
<console>:14: error: value update is not a member of scala.collection.immutable. Map[String,Any]
m1("age")=30
^
scala> m1("id")
java.util.NoSuchElementException: key not found: id
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> m1.getOrElse("id",1)
res116: Any = 1
scala> m1
res117: scala.collection.immutable.Map[String,Any] = Map(name -> zoie, age -> 20 )
- 可变 Map
scala> import scala.collection.mutable.Map
import scala.collection.mutable.Map
scala> val m3 = Map(("name","zoie"),("age",20))
m3: scala.collection.mutable.Map[String,Any] = Map(age -> 20, name -> zoie)
scala> m3("age")
res127: Any = 20
scala> m3("age")=18
scala> m3
res129: scala.collection.mutable.Map[String,Any] = Map(age -> 18, name -> zoie)
更新多个键值对
scala> m3 += ("name"->"amy","age"->20)
res159: m3.type = Map(age -> 20, name -> amy)
scala> m3 += ("id"->1)
res131: m3.type = Map(age -> 18, name -> zoie, id -> 1)
scala> m3 += (("city","shanghai"))
res132: m3.type = Map(city -> shanghai, age -> 18, name -> zoie, id -> 1)
scala> m3 -= ("city")
res133: m3.type = Map(age -> 18, name -> zoie, id -> 1)
scala> m3.remove("id")
res134: Option[Any] = Some(1)
scala> m3
res135: scala.collection.mutable.Map[String,Any] = Map(age -> 18, name -> zoie)
遍历Map
scala> m1
res145: scala.collection.immutable.Map[String,Any] = Map(name -> zoie, age -> 20)
scala> for(i