和java一样,scala也提供了List,Map等数据结构,下边我们逐一介绍:
1.数组Array
非常简单,一看就懂,需要注意的是,scala操作数组下标用的是圆括号,而不是方括号。
val arr = new Array[Int](3) //声明一个长度为3的整型数组,注意每个元素初始值为0
arr(0) = 1 //给第1个元素赋值为1
arr(1) = 2 //给第2个元素赋值为2
arr(2) = 3 //给第3个元素赋值为3
当然,也可以这样声明:
val arr = Array("zhangsan","lisi","wangwu")
2.列表List
声明方式:
val intList = List(1,2,3,4,5)
scala的List有头部和尾部的概念,例如上边这个List,我们可以用intList.head来获取这个列表的头部,是1。也可以用intList.tail获取这个列表的尾部,是2,3,4,5。可以看出,头部是一个元素,而尾部则仍然是一个列表。
由于头部是一个元素,我们可以用::操作,在列表头部插入元素,形成一个新列表:
val list2 = 0::intList
val list3 = 0::1::2::3::intList
注意,list2和list3是新列表,原列表intList不会有变化。
当我们需要合并两个列表时,应该使用:::操作
val list1 = List(1,2,3)
val list2 = List(4,5,6)
val list3 = list1:::list2
3.映射Map
声明方法,非常清晰:
val prices = Map("铅笔"->20,"橡皮"->10,"直尺"->15)
注意上边这种方法,我们是生成了一个不可变的Map,无法更新元素,如果要生成可变Map,应该用下边这种方法:
import scala.collection.mutable.Map
val prices = Map("铅笔"->20,"橡皮"->10,"直尺"->15)
修改:
prices("橡皮") = 9
新增:
prices += ("胶带"-)
取值:
prices("铅笔")
遍历Map:
遍历方式和java8的lambda非常类似:
for((k,v) <- prices) printfln("key id %d, value is %d",k,v)
只遍历key:
for(k <- prices.keys)
只遍历value:
for(k <- prices.values)
4.集合Set
与java一样,为同类型不重复元素的聚集:
不可变集合声明:
var mySet = Set("Hadoop","Spark")
可变集合声明:
import scala.collection.mutable.Set
val myMutableSet = Set("zhangsan","lisi")
5.元组tuple
如果你用过python,对元素会很熟悉,元组是不同类型的值的聚集:
val tuple = ("hello",20,1.30,false)
访问元组中的元素:
println(tuple._1)
println(tuple._2)
println(tuple._3)
6.迭代器Iterator
在scala中,迭代器Iterator不是集合,而是提供了一个访问集合的方法,当构建一个集合需要很大的开销时,迭代器就可以发挥很好的作用。
迭代器有两个基本操作:next和hasNext。与java一样,next可以返回下一个元素,hasNext用于检测是否还有下一个元素。直接看代码:
val iter = Iterator("zhangsan","lisi","wangwu")
while (iter.hasNext) {
println(iter.next())
}
val iter = Iterator("zhangsan","lisi","wangwu")
for (elem <- iter) {
println(elem)
}