第五章 scala语言--Collections

第五章 scala语言–Collections



前言

今天是学习Scala第五天打卡,开始学习数组集合。


开始代码之旅

1.数组

代码如下(示例):

  val arr01 = Array[Int](1,2,3,4)
// arr01=Array(1,2,3,3,3,3)
   arr01(1)=99
   println(   arr01(0)  )
   for (elem <- arr01) {
     println(elem)
   }
//遍历元素,需要函数接收元素
//    arr01.foreach(println)
执行结果:
---------------------------------------------------------------------------------------------------------------------------
1
1
99
3
4

1.Java中泛型是<> scala中是[],所以数组用(n)
2.val 约等于 final 不可变描述的是val指定的引用的值(值:字面值,地址)

2.链表

代码如下(示例):

//scala中collections中有个2个包:immutable,mutable  默认的是不可变的immutable
  val list01 = List(1,2,3,4,5,4,3,2,1)
  for (elem <- list01) {
    println(elem)
  }
  list01.foreach(println)
// list01.+=(22)
  val list02 = new ListBuffer[Int]()
  list02.+=(33)
  list02.+=(34)
  list02.+=(35)
  //TODO:学习  scala数据集中的  ++ +=  ++:  :++
  list02.foreach(println)

3.Set

示例:

    val set01: Set[Int] = Set(1,2,3,4,2,1)
    for (elem <- set01) {
      println(elem)
    }
    set01.foreach(println)

    import scala.collection.mutable.Set
    val set02: mutable.Set[Int] = Set(11,22,33,44,11)
    set02.add(88)

    set02.foreach(println)

    val set03: Predef.Set[Int] = scala.collection.immutable.Set(33,44,22,11)
//    set03.add

4.tuple

示例:

    //  val t2 = new Tuple2(11,"sdfsdf")  //2元素的Tuple2  在scala描绘的是K,V
    val t2 = (11,"sdfsdf")  //2元素的Tuple2  在scala描绘的是K,V
    val t3 = Tuple3(22,"sdfsdf",'s')
    val t4: (Int, Int, Int, Int) = (1,2,3,4)
    val t22: ((Int, Int) => Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int) = ( (a:Int,b:Int)=>a+b+8   ,2,3,4,5,6,7,8,9,1,2,3,4,5,6,7,8,9,1,2,3,4)
    println(t2._1)
    println(t4._3)
//    val i: Int = t22._1(8)
//    println(i)
    println(t22._1)
    val tIter: Iterator[Any] = t22.productIterator
    while(tIter.hasNext){
      println(tIter.next())
    }

5.map

示例:

 val map01: Map[String, Int] = Map( ("a",33) ,  "b"->22  ,("c",3434),("a",3333)  )
    val keys: Iterable[String] = map01.keys

    //option: none  some
    println(map01.get("a").get)
//    println(map01.get("w").get)
    println(map01.get("a").getOrElse("hello world"))
    println(map01.get("w").getOrElse("hello world"))
    for (elem <- keys) {
      println(s"key: $elem   value: ${map01.get(elem).get}")
    }
//    keys.foreach()
    val map02: mutable.Map[String, Int] = scala.collection.mutable.Map(("a",11),("b",22))
    map02.put("c",22)
执行结果:
---------------------------------------------------------------------------------------------------------------------------
333
3333
hello world
key: a   value: 3333
key: b   value: 22
key: c   value: 3434

6.艺术

示例:

    val list = List(1,2,3,4,5,6)
    list.foreach(println)
    val listMap: List[Int] = list.map( (x:Int) => x+10  )
    listMap.foreach(println)
    val listMap02: List[Int] = list.map(  _*10 )
    list.foreach(println)
    listMap02.foreach(println)

7.艺术-升华

示例:

val listStr = List(
      "hello world",
      "hello msb",
      "good idea"
    )
//        val listStr = Array(
//      "hello world",
//      "hello msb",
//      "good idea"
//    )
//        val listStr = Set(
//      "hello world",
//      "hello msb",
//      "good idea"
//    )
    val flatMap= listStr.flatMap(  (x:String)=> x.split(" ") )
    flatMap.foreach(println)
    val mapList = flatMap.map( (_,1) )
    mapList.foreach(println)
  • 以上代码有什么问题吗内存扩大了N倍,每一步计算内存都留有对象数据,有没有什么现成的技术解决数据计算中间状态占用内存这一问题?
  • iterator!!!!

8.艺术-再-升华

示例:

   //基于迭代器的原码分析
    val iter: Iterator[String] = listStr.iterator  //什么是迭代器,为什么会有迭代器模式?  迭代器里不存数据!
    val iterFlatMap= iter.flatMap(  (x:String)=> x.split(" ") )
//    iterFlatMap.foreach(println)
    val iterMapList = iterFlatMap.map( (_,1) )
    while(iterMapList.hasNext){
      val tuple: (String, Int) = iterMapList.next()
      println(tuple)
    }
//    iterMapList.foreach(println)
执行结果:
---------------------------------------------------------------------------------------------------------------------------
(hello,1)
(world,1)
(hello,1)
(msb,1)
(good,1)
(idea,1)

1.listStr真正的数据集,有数据的
2.iter.flatMap 没有发生计算,返回了一个新的迭代器

总结

以上就是今天要讲的内容,本文就scala数据集合使用方面列举了一些示例及使用技巧。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值