zoukankan      html  css  js  c++  java
  • 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的组成方式永远分为两个部分,头元素和尾列表

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

  • 相关阅读:
    【LeetCode】048. Rotate Image
    【LeetCode】036. Valid Sudoku
    【LeetCode】060. Permutation Sequence
    【LeetCode】001. Two Sum
    【LeetCode】128. Longest Consecutive Sequence
    【LeetCode】081. Search in Rotated Sorted Array II
    【LeetCode】033. Search in Rotated Sorted Array
    顺时针打印矩阵
    矩形覆盖
    二维数组中的查找
  • 原文地址:https://www.cnblogs.com/JBLi/p/11527133.html
Copyright © 2011-2022 走看看