大数据每日一篇Scala每日一篇大数据

Scala(七)-②-数据结构-集合-Queue-Map-Set

2018-11-20  本文已影响5人  sixleaves

Queue

① Why

为什么学习队列?其一,队列对应显示生活中很多场景,知队列,写程序才能用队列模拟.其二,队列有很多实际的应用场景,如利用优先队列, 获取商品销量的前10名,我们只要让优先队列按照销量为优先级,销量高者位于队尾,固定队列大小为10,即可以实时维护获取前10名.

② How

    val q = mutable.Queue[Any]()
    print(q)
增删
增-单个-向队列添加元素
    // 2.添加元素
    q += 1
    println(q)
增删-单个-出入队列
  // 3.出入队列
    // 3.1 出, 对头出
    val n = q.dequeue()
    println("dequeue q = " + q, "val = " + n)

    // 3.2 入, 队尾入队列
    q.enqueue(6)
    println("q = " + q)
增-批量-添加多个元素
   // 2.1添加集合中多个元素
    q ++= List(4, 3, 2)
    println(q)
增-集合-将集合作为元素添加
  // 2.2将集合视为元素添加
    q += List(4,3,2)
    println(q)
   // 4.获取队列的头尾元素,不会改变队列本身
    println("q head = " + q.head)
    println("q last = " + q.last)
    println("q = " + q)
    // tail 返回第一个元素以外的剩余元素
    println(q.tail.tail.tail)

③ What

队列是一个有序列表, 在底层可以用数组或是链表来实现.用数组的话可以将队列建成环向队列.用链表,可以分别用在头节点中维护头尾指针.

④ Details

Map

① Why

② How

创建Map的四中方式
val map1 = Map("Alice" -> 10, "Bob" -> 20, "City" -> "北京")
println(map1)
val map2 = scala.collection.mutable.Map("Alice" -> 10, "Bob" -> 20, "City" -> "北京")
println(map2)
val map3 = new  scala.collection.mutable.HashMap[String, Int]
println(map3)
val map4 = scala.collection.mutable.Map(("Alice", 10), ("Bob", 20), ("City" , "北京"))
println(map4)
查-map中的元素
方式一-括号方式访问
scala> map4("City")
res11: Any = 北京

scala> map4("City1")
java.util.NoSuchElementException: key not found: City1
  at scala.collection.MapLike$class.default(MapLike.scala:228)
  at scala.collection.AbstractMap.default(Map.scala:59)
  at scala.collection.mutable.HashMap.apply(HashMap.scala:65)
  ... 32 elided
方式二-使用contains方法判断
scala> val key = "City1"
key: String = City1

scala> if (map4.contains(key)) {
     |     println("key存在,值=" + map4(key))
     | }else {
     |     println("key不存在")
     | }
key不存在
方式三-使用get方法
val some = map4.get("City")
if (some != None)
    println(some.get, "some's class = " + some.getClass())
方法四-getOrElse(key, default)

如果对应key不存在返回默认值

val city = map4.getOrElse("City1", "beijing")
println(city)
选择方法总结
改-修改map中的元素
map4("City")="quanzhou"
println(map4)
增-向map中添加元素
方式一:使用+=添加
scala> map4 += ("name"->"Mr.su")
res23: map4.type = Map(Bob -> 20, name -> Mr.su, Alice -> 10)

scala> map4 += ("City"->"Beijing")
res24: map4.type = Map(Bob -> 20, City -> Beijing, name -> Mr.su, Alice -> 10)

scala> println(map4)
Map(Bob -> 20, City -> Beijing, name -> Mr.su, Alice -> 10)
删-删除map中的元素
使用-=运算符
scala> map4 -= ("name", "City")
res21: map4.type = Map(Bob -> 20, Alice -> 10)

scala> println(map4)
Map(Bob -> 20, Alice -> 10)
遍历-map中的4中遍历
方式一-取(k,v)
for ((k,v) <- map4) {
    println(s"key=${k}, value=${v}")
}
方式二-取key
for (k <- map4.keys) {
    println(s"key=${k}, value=${map4(k)}")
}
方式三-取value
for (v <- map4.values) {
    println(v)
}
方式四-取元组
for (e <- map4) {
    println("key=" + e._1, "value=" + e._2)
}

③ What

④ Details

Set

① Why

当我们需要存储不可重复的元素,可以使用Set.

② How

创建

创建不可变set
val s = Set(1,2,3)
println(s)
创建可变set
val mset = scala.collection.mutable.Set(1,2,3, "Hello")
println(mset)

添加

可变set集合的添加
mset += 4
println(mset)
mset.add(5)
println(mset)
mset.+=(6)
println(mset)

删除

可变set集合的删除,按照值删除
mset -= 2
println(mset)
mset.remove("Hello")
println(mset)
mset.remove("Nothing")
println(mset)

遍历

for(item <- map4) {
    println(item)
}
上一篇下一篇

猜你喜欢

热点阅读