13集合

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
发布了179 篇原创文章 · 获赞 20 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/ExclusiveName/article/details/104374952
今日推荐