Scala的集合分为三大分支序列 集 映射
1、所有集合都扩展自Iterable特质
2、几乎所有的集合都分为可变与不可变版本
3、集(Set)不保证插入顺序的
4、使用 +来添加元素, -来移除元素,+:添加到头部,:+添加到尾部, ++用来将两个集合拼接, --移除后面集合的所有元素
5、scala的集合中已经包含了很多内置的遍历方法,一般来说在你需要写循环来处理集合元素的时候,都应该先考虑集合自带的这些
Scala中的集合分为可变集合与不可变集合,分别在 scala.collection.mutable包中和 scala.collection.immutable包中
Scala中没有更好的同步集合,如果有需要使用同步集合可考虑使用java的concurrent包中的同步集合。
Scala中有可以支持多线程并行执行的集合 ParSeq,ParSet, 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
}
}