• Scala集合


    Array:
      定长数组
      变长数组
      +=/++=/insert

    定长数组:
    object ArrayApp extends App{

      val a = new Array[string](5)
      a.length //查看数组长度
      a(1) = "hello" //赋值,下标从0开始

      val b = Array("hadoop","spark", "storm") //直接赋值
      b(1) = "flink" //修改值

      val c = Array(2,3,4,5,6,7,8,9)
      c.sum
      c.min
      c.max
      c.mkString
      c.mkString(",")
      c.mkString(" and ")
    }

     

    变长数组:

    val d = scala.collection.mutable.ArrayBuffer[Int] ()

    d += 1
    d += 2
    d += (3,4,5)
    d ++= Array(6,7,8)
    d.insert(0,0) //在第0个位置插入数值0
    d.remove(1) //删除下标1的数值
    d.remove(0,3) //删除下标0到3的数值
    d.trimEnd(2) //从尾部开始删除

    d.toArray //把可变的转成不可变的。

    println(d)


    //取集合
    for(i <- 0 until d.length) {
      println(d(i))
    }

    for(ele <- d) {
      println(ele)
    }


    取反的集合
    for(i <- (0 until d.length).reverse) {
      println(d(i))
    }


    List:

    Nil 就是一个不可变的list(),可以当做一个空的集合。

    scala> Nil
    res0: scala.collection.immutable.Nil.type = List()   //不可变的List()

    object ListApp extends App{
      val l = List(1,2,3,4,5)
    }

    一个list就是由head和tail组合的。
    scala> l.head //head就是第一个元素
    res1: Int = 1

    scala> l.tail //tail就是剩下的元素
    res2: List[Int] = List(2,3,4,5)

    scala> val l2 = 1 :: Nil //:: 就是把1当成head,把后面当成tail拼成一个list。
    l2: List[Int] = List(1)

    scala> val l3 = 2 :: l2
    l2: List[Int] = List(2,1)

    scala> val l4 = 1 :: 2 :: 3 :: Nil
    l4: List[Int] = List(1,2,3)

    val l5 = scala.collection.mutable.ListBuffer[Int] () //变长List

    l5 += 2
    l5 += (3,4,5)
    l5 ++= List(7,8,9)

    l5 -= 2
    l5 -= 3
    l5 -= (1,4) //不会报错,有就减掉没有就算了。
    l5 --= List(7,8,9)

    l5.toList //转成定长的

    l5.toArray //转成Array
    l5.isEmpty //是否为空
    l5.tail.head

    def sum(nums:Int*):Int = {
      if(nums.length == 0) {
        0
      } else {
        nums.head + sum(nums.tail:_*)   //:_* 转成可变参数,其实就是个递归。
      }
    }

    println(sum())
    println(sum(1,2,3,4))


    Set:

    scala> val set = Set(1,2,2,1,4,3)
    set : scala.collection.immutable.Set[Int] = Set(1,2,4,3) //去掉重复的数据了。

    Map:

    import scala.collection.mutable
    import scala.collection.mutable._
    object MapApp extends App{

      val a = Map("PK" -> 18, "zhangsan" -> 30) //不可变的

      val b = scala.collection.mutable.Map("PK" -> 18, "zhangsan" -> 30) //可变的

      val c = mutable.HashMap[String,Int] ()

      b.getOrElse("PK",9) //得到就得到了,没得到的话就放一个默认值进去。

      b("list") = 40 //添加一个参数
      b += ("wangwu" ->4, "zhaoliu" ->5)
      b -= "wangwu"

      遍历:
      第一种方式:
      for((key,value) <- b) {
        println(key + " : " + value)
      }

      第二种方式:
      for(key <- b.keySet) {
        println(key + " : " + b.getOrElse(key, 9))
      }

      直接取value
      for(value <- b.values) {
        println(value)
      }

      for((key,_) <- b) {
        println(key + " : " + b.getOrElse(key, 9))
      }
    }

      Array/List/Map 不可变
      ArrayBuffer/ListBuffer/ 可变

    Option&Some&None之间的关系:

    scala> b.get("PK")
    res17: Option[Int] = Some(16) //类型是Option的

    scala> b.get("PK1")
    res17: Option[Int] = None


    Some的源码:
    final case class Some[+A] (x: A) extends Option[A] {
      def isEmpty = false //如果是Some就不为空,把KEY get取出来就行。
      def get = x
    }


    None的源码:
      case object None extends Option[Nothing] {
      def isEmpty = true //如果是None就为空
      def get = throw new NoSuchElementException("None.get")
    }


    val m = Map(1 -> 2) //key是1,value是2
    println(m(1)) // true
    println(m(2)) //error

    //取2的值
    println(m.get(1).get)
    2

    println(m.getOrElse(2, "None"))
    None

    Option None Some各自的写法:
      abstract class Option[+A]
      case class Some[+A](x: A) extends Option[A]
      case object None extends Option[Nothing]


    Tuple : 元组

    // 元组:(........) 下标从1开始。
    object TupleApp extends App{
      val a = (1,2,3,4,5)
      a._1

      for(i <- 0 until(a.productArity)) {
        println(a.productElement(i))
      }

      val hostPort = ("localhost",8080)
      hostPort._1
      hostPort._2
    }

  • 相关阅读:
    微信公众号(服务号) 微信支付 由于支付链接不一致导致无法支付
    eclipse tomcat 网页404的一个小问题
    SpringMVC 拦截器(interceptors)对样式(css),JavaScript(js),图片(images)链接的拦截
    Tomcat 改变localhost主页,映射到应用地址
    LeetCode 6. ZigZag Conversion Question
    LeetCode 107. Binary Tree Level Order Traversal II
    LeetCode 70. Climbing Stairs
    LeetCode 191. Number of 1 Bits Question
    LeetCode 100. Same Tree
    go_切片
  • 原文地址:https://www.cnblogs.com/green-frog-2019/p/11354377.html
Copyright © 2020-2023  润新知