Scala 速通語法(十)| 資料結構
阿新 • • 發佈:2021-10-29
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)