一、元组
可以包含不同类型的元素
最多22个元素
使用下划线访问元素 “_”
//元组定义方式一
var tupleDemo=("hello",2.4,10,"a","world")
//迭代器遍历
tupleDemo.productIterator.foreach(x=>println(x))
//元组定义方式二
var tupleDemo2=new Tuple5("a","b","c","d","e")
//元组定义方式三
def mike="mike"->5->6
println(mike)
println(mike.getClass) //获取类型
//元组定义方式四
val tpl=("zhanghao","xinjiekou","19")
val (name,address,age)=tpl
println(name)
println(address)
println(age)
}
二、Scala集合
Seq
序列,元素按顺序排列
Set
集合,元素不重复
Map
映射,键值对集合
不可变集合
scala.collection.immutable 默认scala选择不可变集合
Set:ListSet、HashSet、TreeSet
Map:ListMap、HashMap、TreeMap
Seq:Vector、String、Range、List、Stack、Stream、Queue
indexedSeq 读取效率高,应用于随机访问比较频繁
linearSeq 写的效率高,应用于数据量大,经常插入、删除
可变集合:可以修改、添加或移除一个集合的元素
scala.collection.mutable
• List常用操作
var a=List("a","b","c")
//增加元素,默认不可变类型
a:+"x"
"x"+:a
//可变List增加元素,需要先导入可变包
import scala.collection.mutable._
ListBuffer(1,2,3,4)
val lb=ListBuffer(1,2,3,4)
lb+=100
lb+=:lb
List(22,23)++=:lb
var b=List(20,5,100,11,50)
var iter=b grouped 2 //分组
iter.next()
var b=List(20,5,100,11,50)
var iter2=b.sliding(2) //分组,此方法会滑动打印,默认一个元素,可在后面指定滑动元素个数 var iter2=b.sliding(2,2) 则会滑动两个元素
iter2.next()
var a1=Array(1,2,3)
var a2=Array(2,3,4,5)
var a=List.concat(a1,a2) //合并Array形成List
var a3=a1++a2 //合并Array形成一个新的Array
区别在于形成的List不可修改,Array可以修改
var b=List(20,5,100,11,50)
b.filter(x=>x%2!=0) //过滤操作
只有一个参数的时候可以简写:b.filter(_%2!=0)
b.reverse //反转
//排序操作
b.sorted //默认升序
b.sorted(Ordering.Int.reverse) //降序
b.sortWith(_<_) //升序
b.sortWith(_>_) //降序
b.sortBy(x=>x) //升序
b.sortBy(x=>x*(-1)) //降序
• Set常用操作
var a=Set("a","b","c")
a+="m" //增加元素
a-="m" //减少元素
var b=Set("a","ab","cc")
a--b //a去除与b相交的,即a与b的差集 等同于 a&~b a diff b
a++b //a与b的并集 等同于 a|b
a&b //a与b的交集
• Map常用操作
var a=Map("a"->1,"b"->2,"c"->3)
//增加元素
a+=("j"->0)
//改变元素
a+=("j"->10)
//将集合a的元素放入b集合,中途会添加修改元素
var b=a++Map("a"->33,"d"->2)
//for遍历k,v
for((k,v)<- a){println(k+v)}
三、Scala Stream&Vector
• Stream是List惰性版,它只确定第一个值,后面的值用到再求值,可以放值数据过大全部加载导致内存溢出
val stream =(1 to 10000).toStream
stream.head
stream.tail
stream(3)
stream.tail
• Vector拥有连续的内存空间,利于随机存取(直接访问)
val v=Vector(1,2,3)
val v1=v++Vector(3) //添加v和新元素到v1
v1.length //查看v1元素个数
val x=IndexedSeq(1,2,3)