7.集合類
111.可變set一
112.可變set二
113.不可變MAP集合一
114.不可變MAP集合二
115.不可變MAP集合三
116.可變map一
package com . itbaizhan . chapter07
//TODO 2. 使用 mutable.Map 前導入如下包
import scala . collection . mutable
// 可變 Map 集合 object MapMutable extends App {
//TODO 1. mutable.Map 表示可變的 Map 集合
val map1 = mutable . Map ( 1 -> " 劉備 " , 2 -> " 關
羽 " , 3 -> " 張飛 " )
val map2 = mutable . Map ( 6 -> " 曹操 " , 7 -> " 許
褚 " , 8 -> " 夏侯淵 " )
//TODO 3. 添加鍵值對元素 , 原 Map 集合對象改變
map1 . put ( 4 , " 趙云 " )
println ( "put 后 map1:" + map1 . mkString ( "," ))
//TODO 4. + 添加鍵值對不改變原集合
val map3 : mutable . Map [ Int , String ] = map1 +
( 5 -> " 鳳雛 " )
println ( "+ 后 map1:" + map1 . mkString ( "," ))
println ( "+ 后 map3:" + map3 . mkString ( "," ))
println ( map1 eq map3 ) //false
//TODO 5. += 添加鍵值對改變原集合 , 并返回修改后 Map 對
象的地址
val map4 : mutable . Map [ Int , String ] = map1 +=
( 5 -> " 鳳雛 " )
println ( "+= 后 map1:" + map1 . mkString ( "," ))
println ( "+= 后 map4:" + map4 . mkString ( "," ))
println ( map1 eq map4 ) //true
//TODO 6. 修改 key 對應的 value
map1 . update ( 1 , " 劉玄德 " )
println ( "update 后 map1:" + map1 . mkString ( "," ))
map1 ( 1 ) = " 劉備 "
println ( "update 后 map1:" + map1 . mkString ( "," ))
//TODO 7. 刪除數據
map1 . remove ( 1 )
println ( "remove 后 map1:" + map1 . mkString ( "," ))
// - 不改變原 Map 集合
val map5 : mutable . Map [ Int , String ] = map1 - 2 ?
println ( "map1 - 2 后 map1:" + map1 . mkString ( "," ))
println ( "map5:" + map5 . mkString ( "," ))
// -= 不改變原 Map 集合
val map6 : mutable . Map [ Int , String ] = map1 -=
3
println ( "map1 -= 3 后
map1:" + map1 . mkString ( "," ))
println ( "map6:" + map6 . mkString ( "," ))
println ( map1 eq map6 ) //true
//TODO 8. Map 集合轉換為其它類型的集合
val set : Set [( Int , String )] = map1 . toSet
println ( "set:" + set )
println ( "set String:" + set . mkString ( "," ))
val list : List [( Int , String )] = map1 . toList
println ( "list:" + list )
println ( "list String:" + list . mkString ( "," ))
val seq : Seq [( Int , String )] = map1 . toSeq
println ( "seq:" + seq )
val array : Array [( Int , String )] =
map1 . toArray
println ( "array:" + array )
println ( "array String:" + array . mkString ( "," ))
//TODO 9. 其它常用方法
//get 和 getOrElse 方法的用途同不可變 Map 一樣
println ( map1 . get ( 2 ))
println ( map1 . getOrElse ( 1 , "default" ))
//keys 獲取所有的 key: Iterable[T]
val keys : Iterable [ Int ] = map1 . keys
//keySet 獲取所有的 key: collection.Set[T]
val keySet : collection . Set [ Int ] = map1 . keySet
//keysIterator 獲取所有的 key:: Iterator[T] 實時效果反饋
1. 關于可變 Map 相關代碼的描述,錯誤的是:
A
使用可變 Map 集合,通常在 Map 前使用
mutable.
, 并提前導入
scala.collection.mutable
。
B
mkString("分隔符")
將 Map 集合中的鍵值對轉換為字符串,鍵值對
之間使用指定的符號分割元素, key 和 value 之間使用 -> 。
C
update(1,"劉玄德")
如果 key 1 存在則修改,不存在則添加。
D
Map 集合不可以轉換為其它類型的集合。
答案:
1=>D Map 集合轉換為其它類型的集合
val keysIterator : Iterator [ Int ] =
map1 . keysIterator
//values 獲取所有的 value: Iterable[T]
val values : Iterable [ String ] = map1 . values
//valuesIterator 獲取所有的 value: Iterator[T]
val valuesIterator : Iterator [ String ] =
map1 . valuesIterator
// 清空 Map 集合
println ( "map2 clear 前 :" + map2 . mkString ( "," ))
map2 . clear ()
println ( "map2 clear 后 :" + map2 . mkString ( "," ))
//put 如果 key 不存在,則執行添加
map2 . put ( 1 , "aa" )
println ( "map2 put:" + map2 . mkString ( "," ))
}

117.可變map二
118.可變map三
119.不可變數組一
// 添加數組元素,創建新數組對象
val arr3 : Array [ Int ] = arr1 : + 5
println ( "arr1 string:" + arr1 . mkString ( "," ))
println ( "arr3
string:" + arr3 . mkString ( "," )) //8,9,0,5
val arr4 : Array [ Int ] = 5 +: arr1 //arr1 +: 5 不
識別
println ( "arr4
string:" + arr4 . mkString ( "," )) //5,8,9,0
// 添加集合中的全部元素
val arr5 : Array [ Int ] = arr1 ++ arr2
println ( "arr5 string:" + arr5 . mkString ( "," ))
val arr6 : Array [ Int ] = arr1 ++: arr2 // 等價 ++
println ( "arr6 string:" + arr6 . mkString ( "," ))
//TODO 5. 數組遍歷
for ( ele <- arr1 ){
print ( ele + "\t" )
}
println ()
//arr1.foreach(println)
//arr1.foreach(print)
//TODO 6. 多維數組

120.不可變數組二
val matrixArray : Array [ Array [ Int ]] =
Array . ofDim [ Int ]( 3 , 2 )
matrixArray . foreach ( arrayEle => arrayEle . foreac
h ( println ))
//TODO 7. 合并數組 功能類似 ++
val arr7 : Array [ Int ] = Array . concat ( arr1 ,
arr2 )
println ( "arr7 string:" + arr7 . mkString ( "," ))
//TODO 8.range 的使用 實時效果反饋
1. 關于不可變 Array 相關的描述,錯誤的是:
A
不可變 Array 數據有序,可以重復。
B
不可變 Array 的不可變指的是堆內存中 Array 對象指向的數據
對象的地址不可變。
C
不可變 Array 中的元素不論通過怎樣的操作都無法進行修
改。
D
不可變 Array 中的元素可以進行修改。
答案:
1=>C
121.不可變數組三
122.不可變數組四
123.可變數組一
package com . itbaizhan . chapter07
import scala . collection . mutable . ArrayBuffer
// 可變數組
object ArrayBufferDemo extends App {
//TODO 1. 可變數組實例化
val arrbuf1 = ArrayBuffer ( 'a' , 'b' , 'c' , 'd' )
val arrbuf2 = ArrayBuffer ( 'u' , 'v' , 'w' , 'x' )
//TODO 2. 添加元素,原數組改變,并返回改變后的數組
val arrbuf3 : ArrayBuffer [ Char ] = arrbuf1 +=
'e'
println ( arrbuf1 eq arrbuf3 ) // true
arrbuf1 . append ( 'f' , 'g' ) // 可以添加一個,也可以同時
添加多個元素
//TODO 3. 修改元素 如下兩種方式等價
arrbuf1 ( 0 ) = 'A'
arrbuf1 . update ( 0 , 'A' )
println ( " 修改后: " + arrbuf1 . mkString ( "," ))
//TODO 4. 刪除元素

//arrbuf1.remove(5)// 刪除下標為 5 的元素
124.可變數組二
125.可變數組和不可變數組轉換
可變數組和不可變數組轉換
集合常用方法
基礎方法
package com . itbaizhan . chapter07
import scala . collection . mutable
import scala . collection . mutable . ArrayBuffer
object ArrayTransformer extends App {
val buffer : ArrayBuffer [ Int ] = ArrayBuffer ( 1 ,
2 , 3 )
// 將可變數組轉化為不可變數組
val array : Array [ Int ] = buffer . toArray
// 將不可變數組轉化為可變數組
val buffer1 : mutable . Buffer [ Int ] =
array . toBuffer
// 數組轉 List
val list : List [ Int ] = array . toList
val list1 : List [ Int ] = buffer . toList
// 數組轉 Set
val set : Set [ Int ] = array . toSet
val set1 : Set [ Int ] = buffer . toSet
// 數組轉 Seq
val seq : Seq [ Int ] = array . toSeq
val seq1 : Seq [ Int ] = buffer . toSeq
}
package com . itbai
126.集合常用方法_基礎方法
127.集合常用方法_衍生方法一
128.集合常用方法_衍生方法二
129.集合常用方法_計算方法一
130.集合常用方法_計算方法二
131.集合常用方法_折疊方法
132.集合常用方法_功能方法map一
133.集合常用方法_功能方法map二
134.集合常用方法_功能方法flatten
135.集合常用方法_功能方法flamap
136.集合常用方法_單詞數量統計一
137.集合常用方法_單詞數量統計二
138.集合常用方法_單詞數量統計三
8.模式匹配
139.swichi回顧
140.基本使用
141.匹配規則_匹配常量
142.匹配規則_匹配類型
143.匹配規則_匹配類型二
144.匹配規則_匹配數組
145.匹配規則_匹配元祖
146.匹配規則_匹配列表
匹配列表
package com . itbaizhan . chapter08
object CaseList extends App {
for ( list <- Array ( List ( 0 ),
List ( 1 , 0 ), List ( 0 , 1 ),
List ( 0 , 0 , 0 ),
List ( 2 , 0 , 1 ), List ( 6 ))) {
val result = list match {
//TODO 1. 匹配 List(0), 一個元素并且值為 0 的 List
case List ( 0 ) => "0"
//TODO 2. 匹配有兩個元素的 List
case List ( x , y ) => x + "@" + y
//TODO 3. 匹配三個三個以上元素并且第一個元素為 0
的 List 集合
case List ( 0 , _ * ) => "0 ..."
case _ => "other list"
? }
println ( result )
}
val list : List [ Int ] = List ( 1 , 2 , 3 , 4 , 5 ) //1-2-
List(3, 4, 5)
//val list: List[Int] = List(1, 2)//1::2::Nil
=>1-2-List()
list match { 實時效果反饋
1. 關于 Scala 匹配列表代碼的描述,錯誤的是:
A
case List(0) => "0"
匹配一個元素并且值為 0 的 List 。
B
case List(x, y) => x + "@" + y
匹配有兩個元素的列表,然后將元素值
賦給對應的 x 和 y 然后拼接字符串。
C
case List(0,
_
*)
匹配三個或三個以上元素并且第一個元素為 0 的
List 集合。
D
case one :: two :: rest => println(one + " - " + two + " - " + rest)
匹配有兩個或兩個
以上的 List 集合, one 代表第一個元素, two 代表第二個元素, rest
代表剩余元素組成的 List 集合。
答案:
1=>C 單獨看該分支表示匹配第一個元素為 0 的列表,不管該列
表幾個元素。