scala学习笔记(十二) 集合

Scala的集合分为三大分支序列  映射

 

1、所有集合都扩展自Iterable特质

2、几乎所有的集合都分为可变与不可变版本

3、集(Set不保证插入顺序的

4、使用 +来添加元素, -来移除元素+:添加到头部,:+添加到尾部, ++用来将两个集合拼接, --移除后面集合的所有元素

5scala的集合中已经包含了很多内置的遍历方法,一般来说在你需要写循环来处理集合元素的时候,都应该先考虑集合自带的这些

 

Scala中的集合分为可变集合与不可变集合,分别在 scala.collection.mutable包中和 scala.collection.immutable包中


Scala中没有更好的同步集合,如果有需要使用同步集合可考虑使用javaconcurrent包中的同步集合。

 

Scala中有可以支持多线程并行执行的集合 ParSeqParSet ParMap,但是有一个基本要求是执行的函数式不依赖元素顺序的。

 

普通集合可以通过par方法转成并行集合,如下是在多线程中执行的:

 for (i <- (1 to 100).par) println(i +"")

 

println((1to 100000).par sum)

 

 

集合中很多内容并不好简单的写出来,下面是一些练习:

package demo

import scala.collection.immutable.HashMap
import scala.collection.mutable.ArrayBuffer
import sun.org.mozilla.javascript.internal.ast.Yield

/**
 * @author Administrator
 */
object ScalaIterable {
  def main(args: Array[String]): Unit = {
    //    for (i <- (1 to 100).par) println(i + "")

    indexes("yangmingwei") foreach (println)

    val al = List(2, 3, 2, 0, 2, 5, 0)

    val al2 = removeZero(al)

    println(al)
    println(al2)

    val s = Array("Tom", "Fred", "Harry")
    val m = Map("Tom" -> 3, "Harry" -> 5)

    println(fun(s, m).mkString)

    println(mkString(1 to 10))

    println((al :\ List[Int]())((n: Int, a: List[Int]) => a :+ n))

    println((List[Int]() /: al)(_ :+ _))

    grouped(Array(1, 2, 3, 4, 5, 6, 7, 8), 3) foreach { x => println(x.mkString("[", ",", "]")) }

  }

  def removeZero(arg: List[Int]) = {

    arg filter (_ != 0)
  }

  def grouped(arr: Array[Double], n: Int) = {
//    val tmp = ArrayBuffer[Array[Double]]()
//    var tmp2 = ArrayBuffer[Double]()
//    for (value <- arr) {
//      tmp2 += value
//      if (tmp2.length == n || (tmp.length * n + tmp2.length == arr.length)) {
//        tmp += tmp2.toArray
//        tmp2 = ArrayBuffer[Double]()
//      }
//    }
//    tmp.toArray
    
    val tb = arr.toBuffer
    tb.sliding(n,n).toArray
  }

  def fun(strArrays: Array[String], m: Map[String, Int]) = {
    strArrays flatMap { x => m.get(x) }
  }

  def mkString(seq: Seq[Any]) = {
    seq.reduceLeft(_ + "" + _)
  }

  def indexes(str: String) = {
    var mp = new HashMap[Char, ArrayBuffer[Int]]
    for (i <- (0 until str.length)) {
      if (mp.contains(str(i))) {
        mp(str(i)) += i
      } else {
        mp += (str(i) -> ArrayBuffer(i))
      }
    }
    mp
  }

}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ALAN-YOUNG

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值