Scala的集合分为可变集合与不可变集合,可变集合表示这个集合中的元素可被添加,更新,删除。不可变集合表示对此集合操作以后会产生一个新的集合,而原来这个集合不改变。

所有的集合都在scala.collection包下面并且分为两类
在scala.collection.mutable都是可变集合,在scala.collection.immutable里都是不可变集合。

这是scala.collection.immutable包下的集合的继承关系

clipboard.png

这是加入了scala.collection.mutable后所有集合的继承关系

clipboard.png

下面我介绍几个常用的集合及操作

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类似,不同点在于他内部的对象是有顺序的,在此不多做说明了。

诗和远方丶
24 声望4 粉丝

每篇都是原创,拒绝复制粘贴


« 上一篇
Spark RDD
下一篇 »
Docker学习(一)

引用和评论

0 条评论