目录
集合
Scala的集合有三大类:序列List、集Set、映射Map,所有的集合都扩展自Iterable特质
在Scala中集合有可变(来自mutable包)和不可变(来自immutable包)两种类型,immutable类型的集合初始化后就不能改变了,对immutable类型的集合的操作会生成新的集合。而mutable类型的集合可以在原集合上进行操作,可见,java里的集合对应的是mutable类型的集合
1.序列List
1.不可变的序列 import scala.collection.immutable._
在Scala中列表有2种情况,要么为空(Nil表示空列表),要么是一个head元素加上一个tail列表。9 :: List(5, 2) :: 操作符是将给定的头和尾创建一个新的列表。注意::: 操作符是右结合的,如9 :: 5 :: 2 :: Nil相当于 9 :: (5 :: (2 :: Nil))
操作符:
0::list 0+:list: 0插入到list的前面生成一个新的List
list :+0 : 将一个元素0添加到lst1的后面产生一个新的集合
lst1 ++ lst0 : 2个list合并成一个新的List
lst1 ++: lst0 : 将lst1插入到lst0前面生成一个新的集合
package cn.itcast.collect object ImmutListDemo { def main(args: Array[String]) { //创建一个不可变的集合 val lst1 = List(1,2,3) //将0插入到lst1的前面生成一个新的List val lst2 = 0 :: lst1 val lst3 = lst1.::(0) val lst4 = 0 +: lst1 val lst5 = lst1.+:(0) //将一个元素添加到lst1的后面产生一个新的集合 val lst6 = lst1 :+ 3 val lst0 = List(4,5,6) //将2个list合并成一个新的List val lst7 = lst1 ++ lst0 //将lst1插入到lst0前面生成一个新的集合 val lst8 = lst1 ++: lst0 //将lst0插入到lst1前面生成一个新的集合 val lst9 = lst1.:::(lst0) println(lst9) } } |
2.可变的序列 ListBuffer[]
追加元素: list=+ 4 list.append(4)
合并序列,没有生成新集合: lst0 ++= lst1
合并序列,生成了新集合: lst0 ++ lst1
package cn.itcast.collect import scala.collection.mutable.ListBuffer object MutListDemo extends App{ //构建一个可变列表,初始有3个元素1,2,3 val lst0 = ListBuffer[Int](1,2,3) //创建一个空的可变列表 val lst1 = new ListBuffer[Int] //向lst1中追加元素,注意:没有生成新的集合 lst1 += 4 lst1.append(5) //将lst1中的元素最近到lst0中, 注意:没有生成新的集合 lst0 ++= lst1 //将lst0和lst1合并成一个新的ListBuffer 注意:生成了一个集合 val lst2= lst0 ++ lst1 //将元素追加到lst0的后面生成一个新的集合 val lst3 = lst0 :+ 5 } |
2.集Set
Set是一组相同类型的不能重复的值的列表
- 不可变的Set
添加一个元素生成新set : set1 + 4
合并2个set: set1 ++ Set(5, 6, 7)
package cn.itcast.collect import scala.collection.immutable.HashSet object ImmutSetDemo extends App{ val set1 = new HashSet[Int]() //将元素和set1合并生成一个新的set,原有set不变 val set2 = set1 + 4 //set中元素不能重复 val set3 = set1 ++ Set(5, 6, 7) val set0 = Set(1,3,4) ++ set1 println(set0.getClass) } |
2.可变的Set
向HashSet中添加元素: set1.add(4) set1 += 4
删除一个元素 : set1.remove(2) set1 -= 5
package cn.itcast.collect import scala.collection.mutable object MutSetDemo extends App{ //创建一个可变的HashSet val set1 = new mutable.HashSet[Int]() //向HashSet中添加元素 set1 += 2 //add等价于+= set1.add(4) set1 ++= Set(1,3,5) println(set1) //删除一个元素 set1 -= 5 set1.remove(2) println(set1) } |
3.映射Map
映射Map也有可变和不可变类型之分,常用其子类HashMap,创建的形式大概相同,不同的是还是如同前面所说,不可变的map不可以修改初始化后的值。
package cn.itcast.collect import scala.collection.mutable object MutMapDemo extends App{ val map1 = new mutable.HashMap[String, Int]() //向map中添加数据 map1("spark") = 1 map1 += (("hadoop", 2)) map1.put("storm", 3) println(map1) //从map中移除元素 map1 -= "spark" map1.remove("hadoop") println(map1) } |
在Scala中,把哈希表这种数据结构叫做映射
1.构建映射
1.用箭头表示 Map(“tom”->66)
2.用元组创建 Map((“tom”,66))
3.可变类型的map 可以先声明类型再添加值
Val map =Map[String,Int] map.put(“tom”,66)
2.获取和修改映射中的值
获取值 : val score = map(“tom”) map .get(“tom“) map.getOrElse(“tom”,0)获取 如果没有就返回默认值
修改值,只针对可变类型的:
map(“tom”) = 100 //修改key为tom的值为100
map.update(“tom”,100)
map + =(“tom”,100)
例子: