Scala 速通语法(十)| 数据结构

Queue

  • 队列是一个有序列表,在底层可以用数组或是链表来实现
  • 其输入和输出要遵循先入先出的原则。即:先存入队列的数据,要先取出 后存入的要后取
    //创建
    val que = new mutable.Queue[Int]
    println(que)
    //追加
    que += 9//
    println(que)
    que ++= List(1,2,3) //默认加在队列后面 按元素
    println(que)
    que.addAll(List(4,5,6))

    //出队
    val queele = que.dequeue() //取出头部元素
    println("ele==="+queele+"  que==="+que)
    //入队
    que.enqueue("str")
    println("que==="+que)

    //返回队列元素 不影响队列
    println(que.head)
    println(que.last)
    //返回除了第一个元素的所有元素
    println(que.tail)

Map

  • HashMap 是一个散列表(数组+链表),它存储的内容是键值对(key-value)映射,Java 中的 HashMap是无序的,key 不能重复
  • Scala 中的 Map 和 Java 类似,也是一个散列表,它存储的内容也是键值对(key-value)映射,Scala
    中不可变的 Map 是有序的,可变的 Map 是无序的
  • Scala中,有可变Map(scala.collection.mutable.Map)和不可Map(scala.collection.immutable.Map)
    //创建
    //不可变
    val map2 = immutable.Map("one" -> 1, "two" -> 2, "three" -> 3)
    println(map2)
    //可变
    val map3 = mutable.Map("one" -> 1, "two" -> 2, "three" -> 3)
    println(map3)

    //创建空映射
    val map4 = new mutable.HashMap[String,Int]
    println(map4)

    val map5 = Map(("tuple",2),("tuple2",3))
    println(map5)

    //取值
    //1) 如果 key 存在,则返回对应的值
    //2) 如果 key 不存在,则抛出异常[java.util.NoSuchElementException]
    //3) 在 Java 中,如果 key 不存在则返回 null
    val ele = map3("two")
    println("ele = " + ele)

    //使用 containts 先判断在取值,可以防止异常,并加入相应的处理逻辑
    if (map4.contains("Alice")) {
      println("key 存在,值=" + map4("Alice"))
    } else {
      println("key 不存在 :)")
    }

    //get取值
    println(map3.get("two"))
    println(map3.get(""))

    //getOrElse() 取值
    println(map3.getOrElse("four",4))
    
    //修改
    map3("one") = 11
    println(map3("one"))
    
    //添加
    //增加单个元素
    map3 += ("four"->4)
    map3 += ("five"->50)
    //增加多个元素
    map3 +=("six"->66,"seven"->77)

    //删除
    map3 -=("one","two")
    //说明: "one","two"就是要删除的key 可以写多个
    //如果key存在,就删除,如果key不存在,也不会报错
  • 如何选择取值的方式

    1. 如果我们确定 map 有这个 key ,则应当使用 map(key), 速度快
    2. 如果我们不能确定 map 是否有 key ,而且有不同的业务逻辑,使用 map.contains() 先判断在加入逻辑
    3. 如果只是简单的希望得到一个值,使用 map4.getOrElse("ip","127.0.0.1")
  • Map遍历

      //新建map
      val map1 = mutable.Map(("A",1),("B","北京"),("C",3))
      
      //遍历
          
      ```
      for((k,v)<-map1)println(k + "is mapped to" + v)
      
      for(v<-map1.keys)println(v)
      for(v<-map1.values)println(v)
    
      for(v<-map6)println(v + "key" + v._1 + "value" + v._2)//v是tuple
    

Set

  • 集是不重复元素的结合。集不保留顺序,默认是以哈希集实现
    +默 认 情 况 下 , Scala 使 用 的 是 不 可 变 集 合 , 如 果 你 想 使 用 可 变 集 合 , 需 要 引 用 scala.collection.mutable.Set
  //创建
  //不可变
  val set = Set(1,2,3)
  println(set)
  //可变
  val set2 = mutable.Set(1,2,3)
  println(set2)

  //增加
  set2.add(4)
  //删除
  set2.remove(3)//  存在
  set2.remove(5)//  不存在 不存在,则不生效,也不会报错
  println(set2)

  //遍历
  for(i<-set2)println(i)
  
posted @ 2021-10-29 16:56  —清风碎心—  阅读(46)  评论(0编辑  收藏  举报