1.Scala中的集合有三大类:
序列 Seq --> (List)
集 Set
映射 Map --> 键值对(HashMap)
2.介绍
所有集合都来自于Iterable特质(相当于Java中接口)。
集合也存在可变(mutable)和不可变(immutable)。
immutable类型的集合初始化后就不能更改了。
列表要表示为空,使用nil。
------------↓↓↓ List ↓↓↓------------↓↓↓ List ↓↓↓------------
3.双冒号
val list1 = List(1,2,3)
//头::尾 操作符号可以将开始和结尾创建一个新列表
val list2 = 0 :: list1
println(list2) ---> List(0,1,2,3)
//val list3 = list1.::(0) 或者 0+:list1
4.将list集合合并
//将list2添加到list1的后面。
val list4 = list1 ++ list2
val list5 = list1 ++: list2
//将list2添加到list1的前面。
//注意:是三个冒号,若是两个则会变成数组类型。
val list6 = list1.:::(list2)
5.可变List
import scala.collection.mutable._
//创建
val list7 = ListBuffer[Int](1,2,3)
//创建空的可变list
val list8 = ListBuffer[Int]
6.添加元素
list7 += 5
//追加1或多个元素
list8.append(5,7)
//将一个集合添加到另一个集合中
list8 ++= list7
println(list7)
//生成一个新的ListBuffer
val list9 = list7 ++ list8
//追加元素生成一个新集合
val list10 = list7 :+ 5
------------↓↓↓ Set ↓↓↓=------------↓↓↓ Set ↓↓↓------------
1.不可变
import scala.collection.immutable.HashSet
val set1 = new HashSet[Int]()
//添加元素
生成一个新set集合,原set不变
val set2 = set1 + 4
//合并(排重)
val set3 = Set(1,4,7) ++ set2
2.可变
import scala.collection.mutable.HashSet
val set4 = new mutable.HashSet[Int]()
//添加一个set集合
set4 ++= Set(2,3,4)
//删除
set4 -= 3
set4.remove(2)
------------↓↓↓ Map ↓↓↓------------↓↓↓ Map ↓↓↓------------
1.不可变(不可以修改数据值)
val map1 = Map(("xia",13),("mao",19))
val map2 = Map("xia"->13,"mao"->19)
2.获取map的值
2.1获取map的值(若key不存在会报错)
val value = map1("xia")
2.2 Option相当于告诉调用者,会返回一个你希望要的数据类型。
有两个子类:一个Some,一个None。
key对应成功,Some包装一个数据;对应失败,会返回一个None(相当于空)。
val value1:Option[Int] = map1.get("xia")
if(!value1.isEmpty){ //判断是否为空
//取出真正的值,否则是Some()。
//value1.getOrElse()
//使用参数形式:存在则正确出值,不存在则出默认值。
value1.getOrElse(0)
}
2.3直接使用getOrElse
//对应则出去值,没有则输出默认值0
val value3:Int = map1.getOrElse("xia",0)
3.删除值
//会得到新集合,原有集合不变
val map3 = map1 - "xia"
4.可变Map
import scala.collection.mutable.Map
val map4 = Map(("hao",13),("mao",19))
修改值:
map4("hao") = 18
添加:
map4 += (("hei",30))
map.put("hei",30)
删除:
map4 -= "hei"
map4.remove("hei")
遍历Map(k和v):
for((k,v) <- map4){
println("key值为:"+key+" value值为:"+v)
}
遍历所有k或v:
for(k <- map4.keySet) println(k)
for(v <- map4.values) println(v)
5.for循环推导式——yield
//利用推导式将kv调换
val map5:mutable.Map[Int,String] = for((k,v)<-map4) yield(v,k)
//创建可以排序的map
//对key进行升序排列,字符串是ASCII。
val map6 = SortedMap(("hao",13),("mao",19))
6.将数组转换为Map
//数组必须是k-v形式
val arr = Array(("k1","v1"),("k2","v2"),("k3","v3"))
val map = arr.toMap //不可变map
//将两个数组生成一个map集合
val arr1 = Array("df","at","on")
val arr2 = Array(2,1,3)
//若长度不一致,多余的会舍弃
val arr3:Array[(String,Int)] = arr1.zip(arr2)
val map3 = arr3.toMap