Scala核心程式設計 集合(Seq, list, set, Map)
紙上得來終覺淺,絕知此事要躬行!
列表 List-建立List
基本介紹:
Scala中的List 和Java List 不一樣,在Java中List是一個介面,真正存放資料是ArrayList,而
Scala的List可以直接存放資料,就是一個object
,預設情況下Scala的List是不可變的,List屬於序列Seq。
val
List
= scala。collection。immutable。List
object
List
extends
SeqFactory[List]
建立List的應用案例
val list1 = List(1, 2, 3) //建立時,直接分配元素
println(list1)
val list2 = Nil //空集合
println(list2)
建立List的應用案例小結
1)List 在 scala包物件宣告的,因此不需要引入其它包也可以使用,List 預設是不可變的的集合
2)val List = scala。collection。immutable。List
3)List 中可以放
任何資料型別
,比如 arr1的型別為 List[Any]
4)如果希望得到一個空列表,可以使用
Nil物件
, 在 scala包物件宣告的,因此不需要引入其它包也可以使用
val Nil = scala。collection。immutable。Nil
增加:
向列表中增加元素,
會返回新的列表
/集合物件。
注意
:Scala中List元素的追加形式非常獨特,和Java不一樣。
方式1-在列表的最後增加資料 list1 :+ 8
方式2-在列表的最前面增加資料8 +: list1
方式3-在列表的最後增加資料
1)
符號::表示向集合中 新建集合新增元素。
2)
運算時,集合物件一定要放置在最右邊,
3)
運算規則,從右向左。
4)
::: 運算子是將集合中的每一個元素加入到空集合中去,兩邊都是集合
訪問:
val value1 = list1(1) // 1是索引,表示取出第2個元素。
println(value1)
ListBuffer
ListBuffer是可變的list集合,可以新增,刪除元素,ListBuffer屬於序列
//追一下繼承關係即可
建立:Seq
var
listBuffer = ListBuffer(1,2)
訪問:listBuffer (1)
遍歷 for (item <- listBuffer ) {println(“item=” + item)}
追加:listBuffer += 4 或者 listBuffer 。append(5) 直接改變的listBuffer
list0 = list1 或者 var list2= list0 ++list1 //每個元素新增到list0
刪除 list1。remove(1)
佇列 Queue-基本介紹,佇列的說明:
1)佇列是一個
有序列表
,在底層可以用
陣列
或是
連結串列
來實現。
2)其輸入和輸出要遵循
先入先出
的原則。即:先存入佇列的資料,要先取出。後存入的要後取出
3)在Scala中,由設計者直接給我們提供佇列型別使用。
4)在scala中, 有 scala。collection。mutable。Queue 和 scala。collection。immutable。Queue ,
一般來說
,我們在開發中通常使用可變集合中的佇列。
import scala。collection。mutable
//說明: 這裡的Int是泛型,表示q1佇列只能存放Int型別
//如果希望q1可以存放其它型別,則使用 Any 即可。
val q1 = new mutable。Queue[Int]
println(q1)
追加:
list+= 20
list+= List(1,2,3) //整個加進去
list++= List(2,4,6) //list中每個加進去
入佇列:list。enqueue(9, 8, 7) //按照佇列的演算法,會將資料新增到佇列的最後
出佇列:list。dequeue() //按照進入佇列的順序刪除元素(佇列先進先出
佇列 Queue-返回佇列的元素
返回佇列的第一個元素
:
println(list。
head
) //對佇列本身沒有任何影響
返回佇列最後一個元素
:
println(list。
last
) //對佇列本身沒有任何影響
返回佇列的尾部
:
即:
返回除了第一個以外剩餘的元素,
println(list。
tail
)
級聯使用:這個在遞迴時使用較多:println(list。
tail.tail
)
對映 Map-基本介紹
Java中的Map回顧:
HashMap是一個散列表(
陣列+連結串列
),它儲存的內容是鍵值對(key-value)對映,Java中的HashMap是
無序
的,
key不能重
復。
Scala中的Map介紹
1)Scala中的Map 和Java類似,也是一個散列表,它儲存的內容也是鍵值對(key-value)對映,Scala中
不可變的Map是有序
的,
可變的Map是無序
的。
2)Scala中,有可變Map (scala。collection。mutable。Map) 和 不可變Map(scala。collection。immutable。Map)
方式1-構造不可變對映
Scala中的不可變Map是有序,構建Map中的元素底層是Tuple2型別。
建立:val map1 = Map(“Alice” -> 10, “Bob” -> 20, “Kotlin” -> “北京”)
注意:
。從輸出的結果看到,輸出順序和宣告順序一致。構建Map集合中,集合中的元素其實是Tuple2型別。預設情況下(即沒有引入其它包的情況下),Map是不可變map。為什麼說Map中的元素是Tuple2 型別 [反編譯或看對應的apply]
方式2-構造可變對映
//需要指定可變Map的包,從輸出的結果看到,輸出順序和宣告順序不一致
val map2 = scala。collection。mutable。Map(“Alice” -> 10, “Bob” -> 20, “Kotlin” -> 30
方式3-建立空的對映
val map3 = new scala。collection。mutable。HashMap[String, Int]
println(map3)
方式4-對偶元組
即建立包含鍵值對的二元組, 和第一種方式等價,只是形式上不同而已。對偶元組 就是隻含有兩個資料的元組。
val map4 = mutable。Map( (“A”, 1), (“B”, 2), (“C”, 3),(“D”, 30) )
對映 Map-取值
方式1-使用map(key)
val value1 = map2
(“Alice”)
println(value1)
說明:如果鍵存在, 返回對應的值物件, 如果鍵不存在, 丟擲異常, 在java中 如果不存在返回null
方式2-使用contains方法檢查是否存在key
// 返回Boolean,如果key存在,則返回true,如果key不存在,則返回false
map4。contains(“B”)
說明
:使用containts先判斷在取值,可以防止異常,並加入相應的處理邏輯
方式3-使用map.get(key).get取值
透過 對映。get(鍵) 這樣的呼叫返回一個Option物件,要麼是Some,要麼是None
var map4 = mutable。Map( (“A”, 1), (“B”, “北京”), (“C”, 3) )
println(map4。get(“X“)) //None
println(map4。get(“X”)。get) //得到Some
在
取出
方式4-使用map4.getOrElse()取值
getOrElse 方法 : def
getOrElse[V1 >: V](key: K, default: => V1)
說明:如果key存在,返回key對應的值,如果key不存在,返回預設值。在java中底層有很多類似的操作。
如何選擇取值方式建議
1)如果我們確定key是存在的,應該使用map(“key”) ,速度快。
2)如果我們不確定key是否存在, 而且在不存在時,有業務邏輯處理就是用map。contains() 配合 map(“key”)
3)如果只是簡單
的
希望返回一個值,就使用getOrElse()
對映 Map-對map修改、新增和刪除
更新map的元素
說明:
1)map 是可變的,才能修改,否則報錯
2)如果key存在:則修改對應的值,key不存在,等價於新增一個key-val
新增map元素
刪除map元素
l
對映 Map-對map遍歷: 對map的元素(元組Tuple2物件 )進行遍歷的方式很多,具體如下
:
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 <- map1) println(v)
or(v<-map1) println(v+“key=”+v。_1+“val=”+v。_2)//v是Tuple?
說明:每遍歷一次,返回的元素是Tuple2,取出的時候,可以按照元組的方式來取
集 Set-基本介紹:集是不重複元素的結合
。集不保留順序,預設是以雜湊集實現
Java中Set的回顧:
java中,HashSet是實現Set
能包含重複資料
。Set介面是一種不包含重複元素的 collection,
HashSet中的資料也是沒有順序的
。案例演示:
Scala中Set的說明:預設
情況下,Scala 使用的是
不可變集合
,如果你想使用可變集合,需要引用
scala.collection.mutable
。Set 包
l
Set集合-建立
可變集合的元素新增
mutableSet。add(4) //方式1
mutableSet += 6 //方式2
mutableSet。+=(5) //方式3
如果新增的物件已經存在,則不會重複新增,也不會報錯
可變集合的元素刪除
val set02 = mutable。Set(1,2,4,“abc”)
set02 -= 2 // 運算子形式
set02。-=(4) // ok
set02。remove(“abc”) // 方法的形式,scala的Set可以直接刪除值
println(set02)
遍歷: for (x <- set02) { println(x) }
學習使人進步,共勉!加油!
相關文章
- 2021-06-30SHINee的金起範喊話少女時代的徐賢從未打電話給他
- 2021-06-21徒手用 Go 寫個 Redis 伺服器
- 2021-04-25vue入門:v-for迴圈的使用方法
- 2021-04-24「JavaScript」JavaScript事件迴圈機制
- 2021-03-26少女時代金泰妍,《我獨自生活》出擊,SHINee成員Key的喬遷宴