Scala的集合分为可变集合与不可变集合,可变集合表示这个集合中的元素可被添加,更新,删除。不可变集合表示对此集合操作以后会产生一个新的集合,而原来这个集合不改变。
所有的集合都在scala.collection包下面并且分为两类
在scala.collection.mutable都是可变集合,在scala.collection.immutable里都是不可变集合。
这是scala.collection.immutable包下的集合的继承关系
这是加入了scala.collection.mutable后所有集合的继承关系
下面我介绍几个常用的集合及操作
Traversable表明所有子类都可以被遍历
lterable表示这些集合都可进行迭代操作
Set:无序元素
Seq:有序元素
Map:映射
- List:里面所有类型一样,且不可变,下面是List的常见操作
//两种初始化List的方式,::可以用来连接各元素
val fruit=1::2::3::Nil
val animal=List("tiger","dog","pig")
//两个List可以相连
val fa=fruit++animal
//依次为访问List头,尾元素,List是否为空,查找List中指定元素的位置,根据索引(以0开始)访问List
fa.head
fa.tail
fa.isEmpty
fa.indexOf(0)
fa.apply(4)
//根据特定条件过滤掉部分元素,注意fa并没有改变,此时产生一个新的List
val fa1=fa.filter(x=>x!=1)
//将List每个元素映射成另一个元素
val fa2=fa.map(x=>x+"1")
//flatMap将嵌套List变成一层List
val fa3=List(1,2,3)
//List(List(0, 1, 2), List(1, 2, 3), List(2, 3, 4))
val fa4=fa3.map(x=>g(x))
//List(0, 1, 2, 1, 2, 3, 2, 3, 4)
val fa5=fa3.flatMap(x=>g(x))
//向左规约,即从最左边其将第一第二个元素实行操作,并将操作结果
//当成下次操作的参数之一与三个元素实现操作,直到最右边,结果是18
fa5.reduceLeft((x,y)=>x+y)
//4表示初始值,y表示List中的下一个元素,x表示上次的结果,结果是10
val fa6=fa3.foldLeft(4)((x,y)=>x+y)
...
...
def g(v:Int)=List(v-1,v,v+1)
- Tuple:并不是集合,是一个系列不同对象的集合,一共可有22个Tuple,个人觉得类似于java中的枚举类型。
//初始化语法
val things=("1",2,200.0)
//取得tuple的第一个元素
things._1
//证明它是一个类,结果是class scala.Tuple3
things.getClass
//使用模式匹配为things元素命名,string对应的值就是"1"
val (string,number,float)=things
//遍历输出tuple中的每一个元素
things.productIterator.foreach(println)
- Map:一组映射关系的管理
//初始语法
val map=Map(1->"J",2->"Z",3->"B")
//指定key访问元素
println(map(1))
//判断Key是否在元素里面
println(map.contains(4))
//Map中添加元素
map+(4->"Z")
//Map中删除元素
map-3
//添加多个元素
val map2=map++List(5->"W",6->"C")
//删除多个元素
val map1=map--List(1,2,3)
- Seq:与List类似,不同点在于他内部的对象是有顺序的,在此不多做说明了。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。