scala语言基础:一文带你熟悉六大数据结构
scala语言的数据结构基础,涵盖数组、列表、元组、集、映射、迭代器等。
1.数组
val intValueArr = new Array[Int]( 3) //声明一个长度为3的整型数组,每个数组元素初始化为0
intValueArr( 0) = 12 //给第1个数组元素赋值为12
intValueArr( 1) = 45 //给第2个数组元素赋值为45
intValueArr( 2) = 33 //给第3个数组元素赋值为33
val intValueArr = Array( 12, 45, 33)
val myStrArr = Array( "BigData", "Hadoop", "Spark")
2.列表
val intList = List( 1, 2, 3)
val intList = List( 1, 2, 3)
val intListOther = 0::intList
注意,上面操作执行后,intList不会发生变化,依然是List(1,2,3),intListOther是一个新的列表List(0,1,2,3)
::操作符是右结合的,因此,如果要构建一个列表List(1,2,3),实际上也可以采用下面的方式:
val intList = 1::2::3::Nil
我们也可以使用:::操作符对不同的列表进行连接得到新的列表,比如:
val intList1 = List(1,2)
val intList2 = List(3,4)
val intList3 = intList1:::intList2
3.元组
下面我们声明一个名称为tuple的元组(为了看到声明后的效果,我们这次在Scala解释器中输入代码并执行):
scala> val tuple = ("BigData",2015,45.0)
tuple: (String, Int, Double) = (BigData,2015,45.0) //这行是Scala解释器返回的执行结果
scala> println(tuple._1)
BigData
scala> println(tuple._2)
2015
scala> println(tuple._3)
45.0
当需要访问元组中的某个元素的值时,可以通过类似tuple._1、tuple._2、tuple._3这种方式就可以实现。
4.集
集(set)是不重复元素的集合。列表中的元素是按照插入的先后顺序来组织的,但是,”集”中的元素并不会记录元素的插入顺序,而是以“哈希”方法对元素的值进行组织,所以,它允许你快速地找到某个元素。
集包括可变集和不可变集,缺省情况下创建的是不可变集,通常我们使用不可变集。
下面我们用默认方式创建一个不可变集,如下(在Scala解释器中执行):
scala> var mySet = Set("Hadoop","Spark")
mySet: scala.collection.immutable.Set[String] = Set(Hadoop, Spark)
scala> mySet += "Scala" //向mySet中增加新的元素
scala> println(mySet.contains("Scala"))
true
上面声明时,如果使用val,mySet += “Scala”执行时会报错,所以需要声明为var。(如果要声明一个可变集,则需要引入scala.collection.mutable.Set包)
5.映射
在Scala中,映射(Map)是一系列键值对的集合,也就是,建立了键和值之间的对应关系。在映射中,所有的值,都可以通过键来获取。
映射包括可变和不可变两种,默认情况下创建的是不可变映射,如果需要创建可变映射,需要引入scala.collection.mutable.Map包。
下面我们创建一个不可变映射:
val university = Map("XMU" -> "Xiamen University", "THU" -> "Tsinghua University","PKU"->"Peking University")
如果要获取映射中的值,可以通过键来获取,如下:
println(university("XMU"))
上面代码通过”XMU”这个键,可以获得值Xiamen University。
如果要检查映射中是否包含某个值,可以使用contains方法,如下:
val xmu = if (university.contains("XMU")) university("XMU") else 0
println(xmu)
循环遍历映射,是经常需要用到的操作,基本格式是:
for ((k,v) <- 映射) 语句块
下面给出一个实例:
for ((k,v) <- university) printf("Code is : %s and name is: %s\n",k,v)
6.迭代器
迭代器包含两个基本操作:next和hasNext。next可以返回迭代器的下一个元素,hasNext用于检测是否还有下一个元素。
有了这两个基本操作,我们就可以顺利地遍历迭代器中的所有元素了。
通常可以通过while循环或者for循环实现对迭代器的遍历。
while循环如下:
val iter = Iterator("Hadoop","Spark","Scala")
while (iter.hasNext) {
println(iter.next())
}
注意,上述操作执行结束后,迭代器会移动到末尾,就不能再使用了,如果继续执行一次println(iter.next)就会报错。另外,上面代码中,使用iter.next和iter.next()都是可以的,但是,hasNext后面不能加括号。
for循环如下:
val iter = Iterator("Hadoop","Spark","Scala")
for (elem <- iter) {
println(elem)
}
历史推荐