数组主要用来存储数据类型相同的元素。数组中某个指定的元素是通过索引来访问的,数组的第一个元素索引为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()方法可以迭代输出元组的所有元素,元素的输出顺序和定义时相同。