import
Array.
_
import
scala.collection.mutable.Set
object
DataStructure {
def
main(args
:
Array[String])
:
Unit
=
{
//数组
var
z
:
Array[String]
=
new
Array[String](
3
);
var
z
1
=
new
Array[String](
3
);
z(
0
)
=
"hello"
;
z
1
(
0
)
=
"world"
;
var
z
2
=
Array(
"Runoob"
,
"Baidu"
,
"Google"
);
for
(zz<-z
2
){
println(zz)
}
var
myList
=
Array(
1.9
,
2.9
,
3.4
,
3.5
)
// 输出所有数组元素
for
( x <- myList ) {
println( x )
}
// 计算数组所有元素的总和
var
total
=
0.0
;
for
( i <-
0
to (myList.length -
1
)) {
total +
=
myList(i);
}
println(
"总和为 "
+ total);
// 查找数组中的最大元素
var
max
=
myList(
0
);
for
( i <-
1
to (myList.length -
1
) ) {
if
(myList(i) > max) max
=
myList(i);
}
println(
"最大值为 "
+ max);
var
myMatrix
=
ofDim[Int](
3
,
3
)
// 创建矩阵
for
(i <-
0
to
2
) {
for
( j <-
0
to
2
) {
myMatrix(i)(j)
=
j;
}
}
// 打印二维阵列
for
(i <-
0
to
2
) {
for
( j <-
0
to
2
) {
print(
" "
+ myMatrix(i)(j));
}
println();
}
//合并数组
var
myList
1
=
Array(
1.9
,
2.9
,
3.4
,
3.5
)
var
myList
2
=
Array(
8.9
,
7.9
,
0.4
,
1.5
)
var
myList
3
=
concat( myList
1
, myList
2
)
// 输出所有数组元素
for
( x <- myList
3
) {
println( x )
}
//创建区间数组
var
myList
4
=
range(
10
,
20
,
2
)
var
myList
5
=
range(
10
,
20
)
// 输出所有数组元素
for
( x <- myList
4
) {
print(
" "
+ x )
}
println()
for
( x <- myList
5
) {
print(
" "
+ x )
}
//List列表
// 字符串列表
val
site
:
List[String]
=
List(
"Runoob"
,
"Google"
,
"Baidu"
)
// 整型列表
val
nums
:
List[Int]
=
List(
1
,
2
,
3
,
4
)
// 空列表
val
empty
:
List[Nothing]
=
List()
// 二维列表
val
dim
:
List[List[Int]]
=
List(
List(
1
,
0
,
0
),
List(
0
,
1
,
0
),
List(
0
,
0
,
1
)
)
// 字符串列表
val
site
1
=
"Runoob"
::
(
"Google"
::
(
"Baidu"
::
Nil))
// 整型列表
val
nums
1
=
1
::
(
2
::
(
3
::
(
4
::
Nil)))
// 空列表
val
empty
1
=
Nil
// 二维列表
val
dim
1
=
(
1
::
(
0
::
(
0
::
Nil)))
::
(
0
::
(
1
::
(
0
::
Nil)))
::
(
0
::
(
0
::
(
1
::
Nil)))
::
Nil
/***
* head 返回列表第一个元素
tail 返回一个列表,包含除了第一元素之外的其他元素
isEmpty 在列表为空时返回true
*/
val
site
2
=
"Runoob"
::
(
"Google"
::
(
"Baidu"
::
Nil))
val
nums
2
=
Nil
println(
"第一网站是 : "
+ site
2
.head )
println(
"最后一个网站是 : "
+ site
2
.tail )
println(
"查看列表 site 是否为空 : "
+ site
2
.isEmpty )
println(
"查看 nums 是否为空 : "
+ nums
2
.isEmpty )
val
site
3
=
"Runoob"
::
(
"Google"
::
(
"Baidu"
::
Nil))
val
site
4
=
"Facebook"
::
(
"Taobao"
::
Nil)
// 使用 ::: 运算符
var
fruit
=
site
3
:::
site
4
println(
"site3 ::: site4 : "
+ fruit )
// 使用 Set.:::() 方法
fruit
=
site
3
.
:::
(site
4
)
println(
"site3.:::(site4) : "
+ fruit )
// 使用 concat 方法
fruit
=
List.concat(site
3
, site
4
)
println(
"List.concat(site3, site4) : "
+ fruit )
val
site
5
=
List.fill(
3
)(
"Runoob"
)
// 重复 Runoob 3次
println(
"site5 : "
+ site
5
)
val
num
2
=
List.fill(
10
)(
2
)
// 重复元素 2, 10 次
println(
"num2 : "
+ num
2
)
// 通过给定的函数创建 5 个元素
val
squares
=
List.tabulate(
6
)(n
=
> n * n)
println(
"一维 : "
+ squares )
// 创建二维列表
val
mul
=
List.tabulate(
4
,
5
)(
_
*
_
)
println(
"多维 : "
+ mul )
//反转
val
site
6
=
"Runoob"
::
(
"Google"
::
(
"Baidu"
::
Nil))
println(
"site6 反转前 : "
+ site
6
)
println(
"site6 反转后 : "
+ site
6
.reverse )
//Set集合
val
site
7
=
Set(
"Runoob"
,
"Google"
,
"Baidu"
)
val
nums
6
:
Set[Int]
=
Set()
println(
"第一网站是 : "
+ site
7
.head )
println(
"最后一个网站是 : "
+ site
7
.tail )
println(
"查看列表 site 是否为空 : "
+ site
7
.isEmpty )
println(
"查看 nums 是否为空 : "
+ nums
6
.isEmpty )
// ++ 作为运算符使用--连接
var
site
8
=
site
7
++ nums
6
println(
"site1 ++ site2 : "
+ site
8
)
val
site
10
=
Set(
"Faceboook"
,
"Taobao"
)
// ++ 作为方法使用
site
8
=
site
7
.++(site
10
)
println(
"site1.++(site2) : "
+ site
8
)
val
num
=
Set(
5
,
6
,
9
,
20
,
30
,
45
)
// 查找集合中最大与最小元素
println(
"Set(5,6,9,20,30,45) 集合中的最小元素是 : "
+ num.min )
println(
"Set(5,6,9,20,30,45) 集合中的最大元素是 : "
+ num.max )
val
num
1
=
Set(
5
,
6
,
9
,
20
,
30
,
45
)
val
num
3
=
Set(
50
,
60
,
9
,
20
,
35
,
55
)
// 交集
println(
"num1.&(num2) : "
+ num
1
.&(num
3
) )
println(
"num1.intersect(num2) : "
+ num
1
.intersect(num
3
) )
//Map映射
var
A
:
Map[Char,Int]
=
Map()
A +
=
(
'I'
->
1
)
A +
=
(
'J'
->
5
)
A +
=
(
'K'
->
10
)
A +
=
(
'L'
->
100
)
println(
"colors 中的键为 : "
+ A.keys )
println(
"colors 中的值为 : "
+ A.values )
println(
"检测 colors 是否为空 : "
+ A.isEmpty )
//连接
val
colors
1
=
Map(
"red"
->
"#FF0000"
,
"azure"
->
"#F0FFFF"
,
"peru"
->
"#CD853F"
)
val
colors
2
=
Map(
"blue"
->
"#0033FF"
,
"yellow"
->
"#FFFF00"
,
"red"
->
"#FF0000"
)
// ++ 作为运算符
var
colors
=
colors
1
++ colors
2
println(
"colors1 ++ colors2 : "
+ colors )
// ++ 作为方法
colors
=
colors
1
.++(colors
2
)
println(
"colors1.++(colors2)) : "
+ colors )
//foreach循环
val
sites
=
Map(
"runoob"
->
"http://www.runoob.com"
,
"baidu"
->
"http://www.baidu.com"
,
"taobao"
->
"http://www.taobao.com"
)
sites.keys.foreach{ i
=
>
print(
"Key = "
+ i )
println(
" Value = "
+ sites(i) )}
if
( sites.contains(
"runoob"
)){
println(
"runoob 键存在,对应的值为 :"
+ sites(
"runoob"
))
}
else
{
println(
"runoob 键不存在"
)
}
if
( sites.contains(
"baidu"
)){
println(
"baidu 键存在,对应的值为 :"
+ sites(
"baidu"
))
}
else
{
println(
"baidu 键不存在"
)
}
if
( sites.contains(
"google"
)){
println(
"google 键存在,对应的值为 :"
+ sites(
"google"
))
}
else
{
println(
"google 键不存在"
)
}
//Iterator(迭代器)
/**
* Scala Iterator(迭代器)不是一个集合,它是一种用于访问集合的方法。
迭代器 it 的两个基本操作是 next 和 hasNext。
调用 it.next() 会返回迭代器的下一个元素,并且更新迭代器的状态。
调用 it.hasNext() 用于检测集合中是否还有元素。
让迭代器 it 逐个返回所有元素最简单的方法是使用 while 循环:
*/
val
it
=
Iterator(
"Baidu"
,
"Google"
,
"Runoob"
,
"Taobao"
)
while
(it.hasNext){
println(it.next())
}
val
ita
=
Iterator(
20
,
40
,
2
,
50
,
69
,
90
)
val
itb
=
Iterator(
20
,
40
,
2
,
50
,
69
,
90
)
println(
"最大元素是:"
+ ita.max )
println(
"最小元素是:"
+ itb.min )
println(
"ita.size 的值: "
+ ita.size )
println(
"itb.length 的值: "
+ itb.length )
}
}