数组:array
可变可索引,元素具有相容类型的数据集合
数组直接打印为地址值。需加 (toBuffer) 进行输出
1.定长数组:Array
val arr1 = new Array[Int](8)
//默认的值都为0
//定义一个长度为3的定长数组
val arr3 = Array("hadoop", "storm", "spark")
2.变长数组:ArrayBuffer
需要导入import scala.collection.mutable.ArrayBuffer包
val arr02 = new ArrayBuffer[Int]
//向数组缓冲的尾部追加一个元素
//+=尾部追加元素
ab += 1
//追加多个元素
ab += (2, 3, 4, 5)
//追加一个数组++=
ab ++= Array(6, 7)
3.遍历数组(可用until,Range函数来按要求遍历)
//增强for循环
for(i <- arr)
println(i)
4.数组转换
//将偶数取出乘以10后再生成一个新的数组
val res = for (e <- arr if e % 2 == 0) yield e * 10
//map相当于将数组中的每一个元素取出来,应用传进去的函数
val arr04 = arr01.map(x=>x*3)
5.常用算法
val c = Array(1,2,3)
// 求和
val sum = c.sum
//求最大值
val max = c.max
// 排序(升序)(revserse:降序)
val sort = c.sorted.reverse
元组:tuple
对多个不同类型的对象的简单封装。由_与下标来获取值(下标从1开始)
1.创建与输出
//元组的创建
val tuple1 = (1, 2, 3, "heiheihei")
println(tuple1)
//元组的创建,最大能创建22个
val tup01 = Tuple3(1,2,3)
//可以直接输出结果
println(tup01)
2.元组的遍历
val a = Tuple3(1,2,"wh")
println(a)
// 元组的遍历
for(i <- a.productIterator) println(i)
a.productIterator.foreach(println(_))
3.tomap操作
对于key-value形式的数组
val a = Tuple2(1,"wh")
val ar = Array(a,a,a)
val map = ar.toMap
map.getOrElse(1,"jj")
容器
scala有一套丰富的容器库:
序列
集合
映射
序列
linerSeq:具有高效的tail与head操作
实现类:List Queue
indexseq具有高效的随机存储操作
实现类:Arraybuffer Vector
列表:List
list有头与尾的概念。tail为除去head的其他部分
1.不可变list
//创建一个不可变的集合,长度不能改变,元素也不能改变
val lst1 = List(1,2,3)
2.可变list
导包: scala.collection.mutable.ListBuffer
//指定类型的可变list。
val lst = ListBuffer[Int]
序列:Range
指定开头结尾与跨越长度来生成一串数字
// 生成一个1到10,间隔为2的序列
val rang = Range(1,10,2)
println(rang)
集合:Set
默认是不可变的。去重。
导入:import scala.collection.mutable.Set变为可变set。定义的方法一样
val ints = Set(1,2,2)
//添加数据
val ints1 = ints+=3
映射:map
1.创建
//创建一个不可变得Map
val map01 = Map[String,Int]("james"->20,"luce"->22)
//构造可变映射
val map2 = scala.collection.mutable.Map("Alice" -> 10, "Bob" -> 20)
2.获取值
val map2 = scala.collection.mutable.Map("Alice" -> 10, "Bob" -> 20)
// 添加
map2+=("jack"->33)
// 获取,若没有值,则进行取代
map2.getOrElse("jack",0)