Scala 速通语法(十)| 数据结构
Queue
- 队列是一个有序列表,在底层可以用数组或是链表来实现
- 其输入和输出要遵循先入先出的原则。即:先存入队列的数据,要先取出 后存入的要后取
//创建
val que = new mutable.Queue[Int]
println(que)
//追加
que += 9//
println(que)
que ++= List(1,2,3) //默认加在队列后面 按元素
println(que)
que.addAll(List(4,5,6))
//出队
val queele = que.dequeue() //取出头部元素
println("ele==="+queele+" que==="+que)
//入队
que.enqueue("str")
println("que==="+que)
//返回队列元素 不影响队列
println(que.head)
println(que.last)
//返回除了第一个元素的所有元素
println(que.tail)
Map
- HashMap 是一个散列表(数组+链表),它存储的内容是键值对(key-value)映射,Java 中的 HashMap是无序的,key 不能重复
- Scala 中的 Map 和 Java 类似,也是一个散列表,它存储的内容也是键值对(key-value)映射,Scala
中不可变的 Map 是有序的,可变的 Map 是无序的 - Scala中,有可变Map(scala.collection.mutable.Map)和不可Map(scala.collection.immutable.Map)
//创建
//不可变
val map2 = immutable.Map("one" -> 1, "two" -> 2, "three" -> 3)
println(map2)
//可变
val map3 = mutable.Map("one" -> 1, "two" -> 2, "three" -> 3)
println(map3)
//创建空映射
val map4 = new mutable.HashMap[String,Int]
println(map4)
val map5 = Map(("tuple",2),("tuple2",3))
println(map5)
//取值
//1) 如果 key 存在,则返回对应的值
//2) 如果 key 不存在,则抛出异常[java.util.NoSuchElementException]
//3) 在 Java 中,如果 key 不存在则返回 null
val ele = map3("two")
println("ele = " + ele)
//使用 containts 先判断在取值,可以防止异常,并加入相应的处理逻辑
if (map4.contains("Alice")) {
println("key 存在,值=" + map4("Alice"))
} else {
println("key 不存在 :)")
}
//get取值
println(map3.get("two"))
println(map3.get(""))
//getOrElse() 取值
println(map3.getOrElse("four",4))
//修改
map3("one") = 11
println(map3("one"))
//添加
//增加单个元素
map3 += ("four"->4)
map3 += ("five"->50)
//增加多个元素
map3 +=("six"->66,"seven"->77)
//删除
map3 -=("one","two")
//说明: "one","two"就是要删除的key 可以写多个
//如果key存在,就删除,如果key不存在,也不会报错
-
如何选择取值的方式
- 如果我们确定 map 有这个 key ,则应当使用 map(key), 速度快
- 如果我们不能确定 map 是否有 key ,而且有不同的业务逻辑,使用 map.contains() 先判断在加入逻辑
- 如果只是简单的希望得到一个值,使用 map4.getOrElse("ip","127.0.0.1")
-
Map遍历
//新建map val map1 = mutable.Map(("A",1),("B","北京"),("C",3)) //遍历 ``` for((k,v)<-map1)println(k + "is mapped to" + v) for(v<-map1.keys)println(v) for(v<-map1.values)println(v) for(v<-map6)println(v + "key" + v._1 + "value" + v._2)//v是tuple
Set
- 集是不重复元素的结合。集不保留顺序,默认是以哈希集实现
+默 认 情 况 下 , Scala 使 用 的 是 不 可 变 集 合 , 如 果 你 想 使 用 可 变 集 合 , 需 要 引 用scala.collection.mutable.Set
包
//创建
//不可变
val set = Set(1,2,3)
println(set)
//可变
val set2 = mutable.Set(1,2,3)
println(set2)
//增加
set2.add(4)
//删除
set2.remove(3)// 存在
set2.remove(5)// 不存在 不存在,则不生效,也不会报错
println(set2)
//遍历
for(i<-set2)println(i)