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
的列表,不管该列
表几个元素。