• scala02


    scala02课件

    函数得定义

    val funtionName=(param:ParamType...)=>{}

    这种定义方式没有返回值类型,会自己进行适配

    函数在scala中可以任务是一个可以使用得值

    函数在放置得时候会显示签名信息,描述当前函数得一个描述信息文件

    eg:scala中存在三种类型 class类  object对象  trait特质(接口)

    定义得函数其实在scala内部已经存在模板,function0-function22我们根据参数得数量不一致可以得出23中函数

    函数定义得复杂形式

    scala> val add:(Int,Int)=>Int=(x,y)=>{x+y}

    add: (Int, Int) => Int = <function2>

    val func:(paramType...)=>returnType=(param...)=>{content}

    如果直接放置函数则显示得是签名信息  function()调用

    高级函数得使用

    scala> val a:(Int,Int)=>Int = add

    a: (Int, Int) => Int = <function2>

    scala> val b:(Int,Int)=>Int=add

    b: (Int, Int) => Int = <function2>

    函数得放置类型,函数可以作为返回值

    函数作为参数传递

    scala> calculate(1,2,add)

    res10: Int = 3

    scala> val cj=(x:Int,y:Int)=>x*y

    cj: (Int, Int) => Int = <function2>

    scala> calculate(2,3,cj)

    res11: Int = 6

    scala> calculate(3,4,(x:Int,y:Int)=>x%y)

    res12: Int = 3

    注意函数得泛型

    函数和方法几乎是一个东西?

    函数和方法得相互转换?

    scala> val sum=(x:Int,y:Int)=>x+y

    sum: (Int, Int) => Int = <function2>

    scala> sum

    res14: (Int, Int) => Int = <function2>

    scala> add _

    res15: (Int, Int) => Int = <function2>

    scala> res15(1,2)

    res16: Int = 3

    scala> add _(2,3)

    <console>:1: error: ';' expected but '(' found.

    add _(2,3)

         ^

    scala> (add _)(3,4)

    res17: Int = 7

    函数能够作为方法得参数,如果将方法也放入到方法得参数中

    scala> (add _)(3,4)

    res17: Int = 7

    scala> calculate(2,3,add _)

    res18: Int = 5

    scala> calculate(2,3,add)

    res19: Int = 5

    在默认情况下,方法如果作为参数了,那么可以自动转换为函数

    scala> println _

    res21: () => Unit = <function0>

    scala> println(1,2,3,4,5)

    (1,2,3,4,5)

    scala> var arr = Array(1,2,3,4,5,6,76)

    arr: Array[Int] = Array(1, 2, 3, 4, 5, 6, 76)

    scala> arr.foreach(println)

    1

    2

    3

    4

    5

    6

    76

    scala> arr.foreach(println _)

    经常使用得打印方法

    总结:

    1. 函数和方法得定义方式不一样 def={}  val=>
    2. 函数可以作为表达式单独存在,能够显示签名信息,但是方法只能被调用
    3. 函数是将scala中内置得function0-22trait进行了实现
    4. 函数是scala中得头等公民
    5. 函数和方法得本质区别不大,默认情况下可以相互转换
    6. 方法转换为函数得时候 method _
    7. 其实还是方法使用得多

      

    scala中得集合框架

    scala中集合框架分为两种immutable  mutable

    常用得五种框架

    tuple元组类型 Array数组类型 list  map  set

    元组tuple

    一些列得数据得集合,不可变的

    相当于对象,可以将一些完全不相关的数据放置在一起

    scala> var tp = ("zhangsan",3500)

    tp: (String, Int) = (zhangsan,3500)

    scala> var tp = ("zhangsan",35000,40,"fs")

    tp: (String, Int, Int, String) = (zhangsan,35000,40,fs)

    scala> val tp:(String,String,String)=("","","")

    tp: (String, String, String) = ("","","")

    scala> val tp = new Tuple[String,Int]("zhangsan",20000)

    <console>:11: error: not found: type Tuple

           val tp = new Tuple[String,Int]("zhangsan",20000)

                        ^

    scala> val tp = new Tuple2[String,Int]("zhangsan",20000)

    tp: (String, Int) = (zhangsan,20000)

    scala> val tp:Tuple2[String,Int]=("zhangsan",23000)

    tp: (String, Int) = (zhangsan,23000)

    scala> val tp:(String,Int) = new Tuple2[String,Int]("zhangsan",20000)

    tp: (String, Int) = (zhangsan,20000)

    scala> tp._1

    res25: String = zhangsan

    scala> tp._2

    res26: Int = 20000

    scala> tp

    res27: (String, Int) = (zhangsan,20000)

    scala> (1,tp)

    res28: (Int, (String, Int)) = (1,(zhangsan,20000))

    scala> res28._2._1

    res29: String = zhangsan

    元组是Tuple类的实例,总共存在Tuple1-22

    取值的时候按照元素的名称取值_1_N

    一个特殊的元组对偶元组

    两个元素的元组就是对偶元组

    scala> val tp:Tuple2[String,Int] = ("zhangsan",20000)

    tp: (String, Int) = (zhangsan,20000)

    scala> tp.swap

    res30: (Int, String) = (20000,zhangsan)

    对偶元组中存在一个swap方法进行元素的互换

    对偶元组是map集合中的一个元素

    zip拉链操作

    scala> var arr = Array("hello","world","tom","jack")

    arr: Array[String] = Array(hello, world, tom, jack)

    scala> var arr1 = Array(1,2,3)

    arr1: Array[Int] = Array(1, 2, 3)

    scala> arr zip arr1

    res31: Array[(String, Int)] = Array((hello,1), (world,2), (tom,3))

    scala> arr.zip(arr1)

    res32: Array[(String, Int)] = Array((hello,1), (world,2), (tom,3))

    zip拉链操作完毕的数据是一个元组的array集合,按照木桶原理

    zipWithIndex与下标进行拉链

    scala> arr

    res33: Array[String] = Array(hello, world, tom, jack)

    scala> arr.zipWithIndex

    res34: Array[(String, Int)] = Array((hello,0), (world,1), (tom,2), (jack,3))

    与下标进行拉链操作,下标从0开始

    数组Array

    array存在两种 immutable  mutable

    scala.Array直接使用就是这个默认的,不可变的数组

    scala.collection.mutable.ArrayBuffer可变数组

    Array是长度不可变,但是元素可变

    ArrayBuffer长度和元素都可以变化

    数组的声明

    scala> var arr = Array(1,2,3,4,5,6)

    arr: Array[Int] = Array(1, 2, 3, 4, 5, 6)

    scala> var arr = new Array(3)

    arr: Array[Nothing] = Array(null, null, null)

    scala> arr(1)=3

    <console>:13: error: type mismatch;

     found   : Int(3)

     required: Nothing

           arr(1)=3

                  ^

    scala> arr(0)

    java.lang.NullPointerException

    scala> var arr = new Array[Int](4)

    arr: Array[Int] = Array(0, 0, 0, 0)

    scala> var arr = new Array[Boolean](4)

    arr: Array[Boolean] = Array(false, false, false, false)

    取值方式 arr(index)  赋值arr(index)=N

    声明的时候如果是new的数组,那么一定要指定泛型,不然泛型就是Nothing,不可以使用

    Array的操作方法

    scala> arr:+1

    res38: Array[AnyVal] = Array(false, false, false, false, 1)

    scala> arr:+23

    res39: Array[AnyVal] = Array(false, false, false, false, 23)

    scala> arr

    res40: Array[Boolean] = Array(false, false, false, false)

    scala> arr ++ arr

    res41: Array[Boolean] = Array(false, false, false, false, false, false, false, false)

    scala> arr

    res42: Array[Boolean] = Array(false, false, false, false)

    scala> arr.isEmpty

    res43: Boolean = false

    scala> arr.max

    res44: Boolean = false

    scala> arr.min

    res45: Boolean = false

    scala> arr.sum

    <console>:13: error: could not find implicit value for parameter num: Numeric[Boolean]

           arr.sum

               ^

    scala> var arr = Array(1,2,3,4,5,6)

    arr: Array[Int] = Array(1, 2, 3, 4, 5, 6)

    scala> arr.sum

    res47: Int = 21

    scala> arr.length

    res48: Int = 6

    scala> arr.size

    res49: Int = 6

    sorted sortWith sortBy

    scala> var arr = Array(4,2,1,6,12,23)

    arr: Array[Int] = Array(4, 2, 1, 6, 12, 23)

    scala> arr.sorted

    res51: Array[Int] = Array(1, 2, 4, 6, 12, 23)

    scala> arr

    res55: Array[(String, Int)] = Array((zhangsan,56), (lisi,21), (wangwu,67))

    scala> arr.sortBy

       def sortBy[B](f: ((String, Int)) => B)(implicit ord: scala.math.Ordering[B]): Array[(String, Int)]

    scala> arr.sortBy

       def sortBy[B](f: ((String, Int)) => B)(implicit ord: scala.math.Ordering[B]): Array[(String, Int)]

    scala> arr.sortBy((t:(String,Int))=>t._2)

    res56: Array[(String, Int)] = Array((lisi,21), (zhangsan,56), (wangwu,67))

    scala> arr.sortBy((t:(String,Int))=> -t._2)

    res57: Array[(String, Int)] = Array((wangwu,67), (zhangsan,56), (lisi,21))

    scala> arr.sortBy(t=>t._2)

    res58: Array[(String, Int)] = Array((lisi,21), (zhangsan,56), (wangwu,67))

    scala> val func=(x:(String,Int))=>x._2

    func: ((String, Int)) => Int = <function1>

    scala> arr.sortBy(func)

    res61: Array[(String, Int)] = Array((lisi,21), (zhangsan,56), (wangwu,67))

    scala> arr.sortBy(t=>t._2)

    res62: Array[(String, Int)] = Array((lisi,21), (zhangsan,56), (wangwu,67))

    scala> arr.sortBy(_._2)

    res63: Array[(String, Int)] = Array((lisi,21), (zhangsan,56), (wangwu,67))

    sortWith与谁一起排序

    scala> arr.sortWith(func)

    res64: Array[(String, Int)] = Array((wangwu,67), (zhangsan,56), (lisi,21))

    scala> val func=(x:(String,Int),y:(String,Int))=>x._2<y._2

    func: ((String, Int), (String, Int)) => Boolean = <function2>

    scala> arr.sortWith(func)

    res65: Array[(String, Int)] = Array((lisi,21), (zhangsan,56), (wangwu,67))

    scala> arr.sortWith((x:(String,Int),y:(String,Int))=>x._2>y._2)

    res66: Array[(String, Int)] = Array((wangwu,67), (zhangsan,56), (lisi,21))

    scala> arr.sortWith((x,y)=>x._2>y._2)

    res67: Array[(String, Int)] = Array((wangwu,67), (zhangsan,56), (lisi,21))

    scala> arr.sortWith(_._2>_._2)

    res68: Array[(String, Int)] = Array((wangwu,67), (zhangsan,56), (lisi,21))

    记住下划线的使用方式,统配每一个元素

    匿名函数的使用规则

    sortWith是按照相邻的两个元素进行比较

    以上三种排序方式适用所有的集合

    ArrayBuffer可变数组

    scala> import scala.collection.mutable.ArrayBuffer

    import scala.collection.mutable.ArrayBuffer

    scala> var buff = ArrayBuffer(1,2,3,4,5,6)

    buff: scala.collection.mutable.ArrayBuffer[Int] = ArrayBuffer(1, 2, 3, 4, 5, 6)

    scala> var buff:ArrayBuffer[Int] = ArrayBuffer[Int](1,2,3,4,5,6)

    buff: scala.collection.mutable.ArrayBuffer[Int] = ArrayBuffer(1, 2, 3, 4, 5, 6)

    scala> var buff = new ArrayBuffer[Int](4)

    buff: scala.collection.mutable.ArrayBuffer[Int] = ArrayBuffer()

    scala> var buff = new ArrayBuffer[Int]()

    buff: scala.collection.mutable.ArrayBuffer[Int] = ArrayBuffer()

    在声明arrayBuffer的时候不能加上长度,因为arrayBuffer是长度可变的

    scala> buff

    res70: scala.collection.mutable.ArrayBuffer[Int] = ArrayBuffer()

    scala> buff+=1

    res71: scala.collection.mutable.ArrayBuffer[Int] = ArrayBuffer(1)

    scala> buff

    res72: scala.collection.mutable.ArrayBuffer[Int] = ArrayBuffer(1)

    scala> buff++=Array(1,2,3,4,5)

    res73: scala.collection.mutable.ArrayBuffer[Int] = ArrayBuffer(1, 1, 2, 3, 4, 5)

    scala> buff

    res74: scala.collection.mutable.ArrayBuffer[Int] = ArrayBuffer(1, 1, 2, 3, 4, 5)

    scala> buff-=(1)

    res75: scala.collection.mutable.ArrayBuffer[Int] = ArrayBuffer(1, 2, 3, 4, 5)

    scala> buff--=Array(1,1,1,11,2,3,4)

    res76: scala.collection.mutable.ArrayBuffer[Int] = ArrayBuffer(5)

    scala> buff.insert

    insert   insertAll

    scala> buff.insert

       def insert(n: Int,elems: Int*): Unit

    scala> buff.insert(0,1,2,3,4,5,6,7,8)

    scala> buff

    res78: scala.collection.mutable.ArrayBuffer[Int] = ArrayBuffer(1, 2, 3, 4, 5, 6, 7, 8, 5)

    scala> buff.remove

       def remove(n: Int): Int   override def remove(n: Int,count: Int): Unit

    scala> buff.remove(0)

    res79: Int = 1

    scala> buff

    res80: scala.collection.mutable.ArrayBuffer[Int] = ArrayBuffer(2, 3, 4, 5, 6, 7, 8, 5)

    scala> buff.remove(0,3)

    scala> buffer

    <console>:13: error: not found: value buffer

           buffer

           ^

    scala> buff

    res83: scala.collection.mutable.ArrayBuffer[Int] = ArrayBuffer(5, 6, 7, 8, 5)

    scala> buff.clear

    scala> buff

    res85: scala.collection.mutable.ArrayBuffer[Int] = ArrayBuffer()

    scala> buff.isEmpty

    res86: Boolean = true

    scala> arr.toBuffer

    res88: scala.collection.mutable.Buffer[Int] = ArrayBuffer(1)

    scala> res88.toArray

    res89: Array[Int] = Array(1)

    数组练习题:

    1. 创建一个方法,方法中的参数是一个Array[Int]集合,求出这个数组的最大值,最小值,平均值,一次性返回

    scala> def getMMA(x:Array[Int]):(Int,Int,Double)={

         | (x.max,x.min,x.sum*1.0/x.size)

         | }

    getMMA: (x: Array[Int])(Int, Int, Double)

    scala> getMMA(Array(1,2,3,4,5,6))

    res94: (Int, Int, Double) = (6,1,3.5)

    List集合

    scala.list不可变的,元素和长度都不可变

    scala.collection.mutable.ListBuffer 长度和内容都可变

    scala> var list:List[Int]=List(1,2,3,4,54)

    list: List[Int] = List(1, 2, 3, 4, 54)

    scala> var list:List[Int]=List[Int](1,2,3,4,54)

    list: List[Int] = List(1, 2, 3, 4, 54)

    scala> var list = new List[Int](4)

    <console>:12: error: class List is abstract; cannot be instantiated

           var list = new List[Int](4)

                      ^

    scala> var list = 1::2::3::4::Nil

    list: List[Int] = List(1, 2, 3, 4)

    ::拼接,将元素和list集合进行拼接

    Nil他是list的特殊形式,代表一个空的列表

    var list = 1::2::3::4::Nil))))拼接的时候从最右侧进行拼接

    scala> Nil

    res95: scala.collection.immutable.Nil.type = List()

    scala> 1::Nil

    res96: List[Int] = List(1)

    list中的元素和长度都不可以发生改变

    取值的时候list(N)取第N个位置的元素

    ListBuffer可变的集合

    scala> val buff = ListBuffer(1,2,3,4,5,6)

    <console>:12: error: not found: value ListBuffer

           val buff = ListBuffer(1,2,3,4,5,6)

                      ^

    scala> val buff = scala.collection.mutable.ListBuffer(1,2,3,4,5,6)

    buff: scala.collection.mutable.ListBuffer[Int] = ListBuffer(1, 2, 3, 4, 5, 6)

    scala> import scala.collection.mutable.ListBuffer

    import scala.collection.mutable.ListBuffer

    scala> val buff = new ListBuffer[Int](3)

    <console>:13: error: too many arguments for constructor ListBuffer: ()scala.collection.mutable.ListBuffer[Int]

           val buff = new ListBuffer[Int](3)

                      ^

    scala> val buff = new ListBuffer[Int]()

    buff: scala.collection.mutable.ListBuffer[Int] = ListBuffer()

    -= --= += ++= insert remove clear isEmpty max min sum reverse....ArrayBuffer

    scala> buff

    res106: scala.collection.mutable.ListBuffer[Int] = ListBuffer(1, 1, 2, 3, 4, 5)

    scala> buff.toArray

    res107: Array[Int] = Array(1, 1, 2, 3, 4, 5)

    scala> buff.toBuffer

    res108: scala.collection.mutable.Buffer[Int] = ArrayBuffer(1, 1, 2, 3, 4, 5)

    scala> Array().toBuffer

    res109: scala.collection.mutable.Buffer[Nothing] = ArrayBuffer()

    scala> var arr = Array(1,2,3,4,5)

    arr: Array[Int] = Array(1, 2, 3, 4, 5)

    scala> arr.toList

    res110: List[Int] = List(1, 2, 3, 4, 5)

    toBuffer转换的是ArrayBuffer  toList转换为List  toArray转换为array

    Map也是两种,一种是可变的,一种不可变的

    但是两种map都叫一个名字 Map

    scala> var map:Map[String,Int]=Map("zhangsan"->2000)

    map: Map[String,Int] = Map(zhangsan -> 2000)

    scala> var map = Map("zhangsan"->3500)

    map: scala.collection.immutable.Map[String,Int] = Map(zhangsan -> 3500)

    scala> var map = Map(("zhangsan",5000))

    map: scala.collection.immutable.Map[String,Int] = Map(zhangsan -> 5000)

    元素和长度都不可以发生改变,创建的时候可以放入对偶元组

    scala> map+("lisi"->5000)

    res111: scala.collection.immutable.Map[String,Int] = Map(zhangsan -> 5000, lisi -> 5000)

    scala> map

    res112: scala.collection.immutable.Map[String,Int] = Map(zhangsan -> 5000)

    scala> map("zhangsan")=3400

    <console>:15: error: value update is not a member of scala.collection.immutable.Map[String,Int]

           map("zhangsan")=3400

    scala> val map = new scala.collection.immutable.HashMap[String,Int]()

    map: scala.collection.immutable.HashMap[String,Int] = Map()

    scala> map+("zhangsan"->2000)

    res114: scala.collection.immutable.HashMap[String,Int] = Map(zhangsan -> 2000)

    scala> map

    res115: scala.collection.immutable.HashMap[String,Int] = Map()

    scala> map ++ Map("zhangsan"->23111)

    res117: scala.collection.immutable.Map[String,Int] = Map(zhangsan -> 23111)

    scala> map

    res118: scala.collection.immutable.HashMap[String,Int] = Map()

    eg: ->是一个方法,指向k-v键值对的方法

    不可变的map只能生成新的map集合 +  ++

    map的取值方式

    scala> map("zhangsan")

    res120: Int = 2000

    scala> map("zhangsan1")

    java.util.NoSuchElementException: key not found: zhangsan1

      at scala.collection.MapLike$class.default(MapLike.scala:228)

      at scala.collection.AbstractMap.default(Map.scala:59)

      at scala.collection.MapLike$class.apply(MapLike.scala:141)

      at scala.collection.AbstractMap.apply(Map.scala:59)

      ... 32 elided

    scala> map.get("zhangsan")

    res122: Option[Int] = Some(2000)

    scala> map.get("zhangsan1")

    res123: Option[Int] = None

    map(key)可以取值value

    map.get(key)==>Option==>Some/None

    scala> map

    res126: scala.collection.immutable.Map[String,Int] = Map(zhangsan -> 2000)

    scala> map.get("zhangsan")

    res127: Option[Int] = Some(2000)

    scala> res127.get

    res128: Int = 2000

    scala> map.get("zhangsan1")

    res129: Option[Int] = None

    scala> res129.get

    java.util.NoSuchElementException: None.get

      at scala.None$.get(Option.scala:347)

      at scala.None$.get(Option.scala:345)

      ... 32 elided

    scala> map.getOrElse("zhangsan1",3000)

    res131: Int = 3000

    scala> map.getOrElse("zhangsan",3000)

    res132: Int = 2000

    getOrElse可以取值,如果没有这个key,那么可以给一个默认值

    可变map

    scala> map+=("lisi"->23456)

    res134: scala.collection.mutable.Map[String,Int] = Map(lisi -> 23456, zhangsan -> 20)

    scala> map

    res135: scala.collection.mutable.Map[String,Int] = Map(lisi -> 23456, zhangsan -> 20)

    scala> map++=Map("wangwu"->32000)

    res136: scala.collection.mutable.Map[String,Int] = Map(lisi -> 23456, zhangsan -> 20, wangwu -> 32000)

    scala> map

    res137: scala.collection.mutable.Map[String,Int] = Map(lisi -> 23456, zhangsan -> 20, wangwu -> 32000)

    scala> map-=("zhangsan")

    res138: scala.collection.mutable.Map[String,Int] = Map(lisi -> 23456, wangwu -> 32000)

    scala> map-=("zhangsan","lisi","zhaoliu")

    res139: scala.collection.mutable.Map[String,Int] = Map(wangwu -> 32000)

    scala> map--=Array("zhangsan","lisi")

    res140: scala.collection.mutable.Map[String,Int] = Map(wangwu -> 32000)

    scala> map.remove("zhaoliu")

    res141: Option[Int] = None

    scala> map.remove("wangwu")

    res142: Option[Int] = Some(32000)

    scala> map.put("zhangsan",2000)

    res143: Option[Int] = None

    scala> map

    res144: scala.collection.mutable.Map[String,Int] = Map(zhangsan -> 2000)

    keySet keys  keysIterator  values valuesIterator

    scala> var map = Map("zhangsan"->20000,"lisi"->30000,"wangwu"->49999)

    map: scala.collection.immutable.Map[String,Int] = Map(zhangsan -> 20000, lisi -> 30000, wangwu -> 49999)

    scala> map.keys

    res145: Iterable[String] = Set(zhangsan, lisi, wangwu)

    scala> map.keySet

    res146: scala.collection.immutable.Set[String] = Set(zhangsan, lisi, wangwu)

    scala> map.keysIterator

    res147: Iterator[String] = non-empty iterator

    scala> for(e<-map.keys){

         | println(map(e))

         | }

    20000

    30000

    49999

    scala> map.keysIterator

    res149: Iterator[String] = non-empty iterator

    scala> while(res149.hasNext){

         | println(map(res149.next))

         | }

    20000

    30000

    49999

    scala> for(e<-map.values)

         | println(e)

    20000

    30000

    49999

    通过以上方法可以直接遍历key或者value

    scala> for(e<-map){

         | println(e)

         | }

    (zhangsan,20000)

    (lisi,30000)

    (wangwu,49999)

    scala> for((x,y)<-map)

         | println(x,y)

    (zhangsan,20000)

    (lisi,30000)

    (wangwu,49999)

    scala> for((x,y)<-map)

         | println(x)

    zhangsan

    lisi

    wangwu

    scala> for((x,_)<-map)

         | println(x)

    zhangsan

    lisi

    wangwu

    scala> for((_,x)<-map)

         | println(x)

    20000

    30000

    49999

    scala> for((_,x)<-map)

         | println(_)

    <console>:16: error: missing parameter type for expanded function ((x$1) => println(x$1))

           println(_)

    下划线可以统配所有的元素,但是不能取值

    toMap方法,可以将一个集合转换为map集合

    scala> var arr = Array("zhangsan"->2000,"lisi"->3000)

    arr: Array[(String, Int)] = Array((zhangsan,2000), (lisi,3000))

    scala> var arr1 = Array(("lisi",3000),("zhaosi",3500))

    arr1: Array[(String, Int)] = Array((lisi,3000), (zhaosi,3500))

    scala> arr.toMap

    res158: scala.collection.immutable.Map[String,Int] = Map(zhangsan -> 2000, lisi -> 3000)

    scala> arr1.toMap

    res159: scala.collection.immutable.Map[String,Int] = Map(lisi -> 3000, zhaosi -> 3500)

    scala> var arr = Array(("zhangsan",3000),(1000,20000))

    arr: Array[(Any, Int)] = Array((zhangsan,3000), (1000,20000))

    scala> arr.toMap

    res160: scala.collection.immutable.Map[Any,Int] = Map(zhangsan -> 3000, 1000 -> 20000)

    scala> var map = Map("1"->2,"2"->3,4->"")

    map: scala.collection.immutable.Map[Any,Any] = Map(1 -> 2, 2 -> 3, 4 -> "")

    toMap的时候,原来的数据一定是一个装有对偶元组的集合

    set集合

    scala> var set = Set(1,2,3,4,5)

    set: scala.collection.immutable.Set[Int] = Set(5, 1, 2, 3, 4)

    scala> var set = new Set[Int](3)

    <console>:13: error: trait Set is abstract; cannot be instantiated

           var set = new Set[Int](3)

                     ^

    scala> var set = new HashSet[Int](3)

    <console>:13: error: not found: type HashSet

           var set = new HashSet[Int](3)

                         ^

    scala> var set = new scala.collection.immutable.HashSet[Int](3)

    <console>:13: error: too many arguments for constructor HashSet: ()scala.collection.immutable.HashSet[Int]

           var set = new scala.collection.immutable.HashSet[Int](3)

                     ^

    scala> var set = new scala.collection.immutable.HashSet[Int]()

    set: scala.collection.immutable.HashSet[Int] = Set()

    scala> set+=1

    scala> set

    res162: scala.collection.immutable.HashSet[Int] = Set(1)

    scala> var set = Set(1,2,3)

    set: scala.collection.immutable.Set[Int] = Set(1, 2, 3)

    scala> set+=12345

    scala> set

    res164: scala.collection.immutable.Set[Int] = Set(1, 2, 3, 12345)

    元素可变,集合长度可变

    cala> var set = scala.collection.mutable.Set(1,2,3,4)

    set: scala.collection.mutable.Set[Int] = Set(1, 2, 3, 4)

    scala> set+=123

    res169: scala.collection.mutable.Set[Int] = Set(1, 2, 3, 123, 4)

    scala> set

    res170: scala.collection.mutable.Set[Int] = Set(1, 2, 3, 123, 4)

    scala> set-=(1,2,3)

    res171: scala.collection.mutable.Set[Int] = Set(123, 4)

    scala> set.insert(1,2)

    <console>:15: error: value insert is not a member of scala.collection.mutable.Set[Int]

           set.insert(1,2)

               ^

    scala> set.remove(1)

    res173: Boolean = false

    scala> set

    res174: scala.collection.mutable.Set[Int] = Set(123, 4)

    scala> set.remove(4)

    res175: Boolean = true

    scala> set

    res176: scala.collection.mutable.Set[Int] = Set(123)

    可变的set集合中存在remove += ++= -= --=

    不存在insert ,一般我们使用set都只是为了一个功能去重toSet方法

    scala> var arr = Array(1,2,1,1,1,2,3,4,5)

    arr: Array[Int] = Array(1, 2, 1, 1, 1, 2, 3, 4, 5)

    scala> arr.distinct

    res178: Array[Int] = Array(1, 2, 3, 4, 5)

    scala> arr.toSet

    res179: scala.collection.immutable.Set[Int] = Set(5, 1, 2, 3, 4)

    list集合补充

    scala> 1::list

    res184: List[Int] = List(1, 1, 2, 3)

    scala> list

    res185: List[Int] = List(1, 2, 3)

    scala> list:::list

    res186: List[Int] = List(1, 2, 3, 1, 2, 3)

    scala> res186.tail

    res187: List[Int] = List(2, 3, 1, 2, 3)

    scala> res186.head

    res188: Int = 1

    ::是在一个list上面拼接一个元素,但是元素只能放在前面

    :::拼接的是一个集合List:::List

    list的组成方式永远分为两个部分,头元素和尾列表

    新拼接的元素就是头元素,后面都是尾列表

  • 相关阅读:
    安装Php时候报错信息:virtual memory exhausted: Cannot allocate memory (不能分配内存)
    putty保持连接不自动段开
    利用iptables将本地的80端口请求转发到8080,当前主机ip为192.168.1.1,命令怎么写?
    linux上大量tcp端口处于TIME_WAIT的问题
    cacti出现snmp error
    洛谷3672:小清新签到题——题解
    BZOJ3040:最短路——题解
    洛谷4230:连环病原体——题解
    洛谷3934:Nephren Ruq Insania——题解
    洛谷3932:浮游大陆的68号岛——题解
  • 原文地址:https://www.cnblogs.com/JBLi/p/11527133.html
Copyright © 2020-2023  润新知