Scala学习1.2 Scala中Array Map等数据结构实战

object Scala_study2 {
  def main(args: Array[String]): Unit = {
    /*
    1.2.1 定长数组和可变数组
      scala中数组分为定长数组和可变数组.默认情况下是不可变(Immutable)数组;
      若要定义可变数组,需要显式导入包
     */
    val arrStr = Array("Scala","Spark")

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

    /*
    1.2.2 数组常用算法
    */

    arrStr(0) = "Storm" //使用()取下标

    arrStr.toBuffer //将不可变数组转换成可变数组

    for(i <- 0 until arrStr.length)
      println(arrStr(i))  //遍历

    for(elem <- arrStr)
      println(elem) //遍历

    arrayBufferInt += 1 //可变数组可以用+=在尾端添加元素

    arrayBufferInt += (2,3,4,5) // 可变数组可以用+=在尾端添加多个元素


    arrayBufferInt ++= Array(6,7,8,9,10,11,12)  //可变数组可以用++=在尾端添加任何集合

    arrayBufferInt.trimEnd(2) //除移最后的2个元素

    arrayBufferInt.remove(2)  //除移下标为2的元素

    arrayBufferInt.remove(2,4)  //除移从下标为2的元素开始的4个元素

    arrayBufferInt.toArray //将可变数组转为不可变数组

    /*
    * 1.2.3 Map映射
    * 默认情况下scala使用不可变的映射,如果想使用可变集,必须明确导入scala.collection.mutable.Map
    *
    * */
    val bigData = Map("Scala" -> 35, "Hadoop" -> 30, "Spark" -> 50)
    println(bigData("Scala"))//通过键,获得值
    println(bigData.contains("Hadoop"))//是否包含给定的键
    println(bigData.getOrElse("Spark",70))//通过键获得值,如果不包含给定键,则返回给定的值
    println(bigData.mkString(" { "," , "," } "))
    println(bigData.drop(2))

    //构造可变集合
    val bigDataVar = scala.collection.mutable.Map("Scala" -> 35, "Hadoop" -> 30, "Spark" -> 50)
    bigDataVar("Spark") = 100  //更新键值对,如果不存在则添加之
    bigDataVar += ("Kafka" -> 69) //使用+=添加
    bigDataVar += ("Kafka" -> 69) //使用-=删除
    for( (k,v) <- bigDataVar)
      println(k + ":" + v)

    for(k <- bigDataVar.keySet)
      println(k)


    /*
    * 1.2.4 Tuple元组
    * 元组是()包住的数据集合,里面可以存放不同类型
    * */
    val tuple1 = (1,"Hello")
    println(tuple1._1)  //打印第一个元素
    println(tuple1._2)  //打印第二个元素


    /*
    * 1.2.5 List(用链表实现)
    * */
    val fruit:List[String] = List("apples", "oranges", "pears")
    val nums:List[Int] = List(1,2,3,4)
    val empty:List[Nothing] = List()  //定义空list
    val dim:List[List[Int]] = List(
      List(1,0,0),List(0,1,0),List(0,0,1)
    ) //定义二维列表

    //列表定义的另一种方式
    //Nil代表空列表
    val fruit2 = "apples" :: ("oranges" :: ("pears" :: Nil))
    val nums2 = 1 :: (2 :: (3 :: (4 :: Nil)))
    val empty2 = Nil

    val dim2 = (1 :: (0 :: (0 :: Nil))) ::
      (0 :: (1 :: (0 :: Nil))) ::
      (0 :: (0 :: (1 :: Nil))) ::
      Nil


    fruit.head  //head方法去除第一个元素
    fruit.tail  //除了第一个值外的所有元素构成的列表
    fruit.isEmpty //判断是否为空


    //:::或者List.:::或者List.concat串联列表
    val fruit3 = "apples" :: ("oranges" :: ("pears" :: Nil))
    val fruit4 = "mangoes" :: ("banana" :: Nil)
    var fruit5 = fruit3 ::: fruit4
    fruit5 = fruit3.:::(fruit4)
    fruit5 = List.concat(fruit3,fruit4)

    /*
    * 1.2.6 Set
    * 
    * 
    * */
    var s : Set[Int] = Set()
    s = Set(1,3,5,7)
    
  }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值