数组主要用来存储数据类型相同的元素。数组中某个指定的元素是通过索引来访问的,数组的第一个元素索引为0,最后一个元素的索引为元素总数减1;
Scala中的数组分为定长数组和变长数组,定义定长数组,需要使用new关键字,而定义变长数组时,则需要导包import scala.collection.mutable.ArrayBuffer。
练习:冒泡排序法
将6,-2,5,9,3,8,3,7,7,2由小到大排序.
- //冒泡排序
- def bubbleSort(arr:Array[Int])={
- for (i <- 0 to arr.length-1){
- for (j <- i to arr.length-1){
- var temp:Int = 0
- if (arr(i) > arr(j)){
- temp = arr(i)
- arr(i) = arr(j)
- arr(j) = temp
- }
- println(arr.mkString(" "))
- }
- }
- arr
- }
- }
- 复制代码
在Scala中,集合有三大类: List、Set以及Map,所有的集合都扩展自Iterable特质。Scala 集合分为可变的(mutable)和不可变(immutable)的集合。其中,可变集合可以在适当的地方被更新或扩展,也就是说你可以修改,添加,移除一个集合的元素。相比之下,不可变集合类永远不会改变。不过,你仍然可以模拟添加,移除或更新操作。但是这些操作将在每一种情况下都返回一个新的集合,同时使原来的集合不发生改变。
在Scala中,List列表和数组类似:
1.所有元素都具有相同类型,2. 可以存放重复元素。但它又不同于数组:
(1)列表(List)一旦被创建就不能改变其中的元素;
(2)列表(List)底层的数据结构是链接表,而数组是一块连续的内存。
(3)因为列表是不可变的,所以所有操作它的方法或者构造器都会创建一个新的列表。
定义列表有两种方法:
(1)实例化List对象
- // 字符串
- val fruit: List[String] =List("apples","oranges","pears")
- // 整型
- 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) )
-
- 复制代码
(2)构造符构造( Nil 和 ::)
- // 字符串
- val fruit = "apples":: ("oranges":: ("pears" :: Nil))
- // 整型
- val nums = 1 :: (2 :: (3 :: ( 4 :: Nil)))
- // 空列表
- val empty = Nil
- // 二维列表
- val dim = (1 :: (0 :: (0 :: Nil))) ::
- (0 :: (1 :: (0 :: Nil))) ::
- (0 :: (0 :: (1 :: Nil))) :: Nil
-
- 复制代码
list常用方法:
list列表的连接:
使用 ::: 运算符或 List.:::() 方法来连接两个或多个列表。 注意,连接顺序;不同类型的列表是无法拼接的
在Scala中,Set是没有重复对象的集合,所有元素都是唯一的。默认情况下,Scala 使用不可变Set集合,若想使用可变的Set集合,则需要引入 scala.collection.mutable.Set 包。
set常用方法:
在Scala中,Map是一种可迭代的键值对(key/value)结构,并且键是唯一的,值不一定是唯一的,所有的值都是通过键来获取的。Map中所有元素的键与值都存在一种对应关系,这种关系即为映射。Map有两种类型,可变集合与不可变集合,默认是不可变Map。若需要使用可变的Map集合,则需要引入 import scala.collection.mutable.Map 类。
示例:
常用方法:
遍历map的keys和values:
- object MapDemo01 {
- def main(args: Array[String]): Unit = {
- val sites = Map("zueb" -> "www.zueb.edu.cn",
- "baidu"->"www.baidu.com",
- "taobao"->"www.taobao.com")
- for(i<-sites.keys){
- print("key="+i)
- println("value="+sites(i))
- }
- }
- }
-
- 复制代码
map:是指通过一个函数重新计算列表中所有元素,并且返回一个相同数目元素的新列表
foreach:和map类似,但是foreach没有返回值,foreach只是为了对参数进行作用。
filter:过滤移除使得传入的函数的返回值为false的元素
flatten:可以把嵌套的结构展开,或者说flatten可以把一个二维的列表展开成一个一维的列表。
flatMap:结合了map和flatten的功能,接收一个可以处理嵌套列表的函数,然后把返回结果连接起来。
groupBy:是对集合中的元素进行分组操作,结果得到的是一个Map。
reduce:对数据进行规约。
示例:
任务:对List(“hello tom hello jerry”, “hello jerry”, “hello kitty”)进行单词计数。
Scala的元组是对多个不同类型对象的一种简单封装,它将不同的值用小括号括起来,并用逗号作分隔,即表示元组。Scala的元组是允许重复元素存在的。
获取元组中的第一个值:t._1
获取元组中的第二个值:t._2
定义元组 val t = ("zueb",3.14,65535)
遍历操作: productIterator()方法可以迭代输出元组的所有元素,元素的输出顺序和定义时相同。