Array 固定长度;ArrayBuffer 可变长度
arr.toBuffer, buf.toArraynew() 访问元素for (elem <- arr) 遍历元素;倒序 arr.reversefor (elem <- arr if ...) ... yield ... 转换为新的数组
arr.filter(...).map(...) 或者更简洁 arr filter { ... } map {...}ArrayBuffer, 可配合 scala.collection.JavaConversions 使用ArrayOps 对象val matrix = Array.ofDim[Double](3, 4) // 3 行 4 列val scores = Map("a" -> 100, "b" -> 90, "c" -> 95) 创建的默认为 immutable 的 hash mapscala.collection.mutable.Mapnew scala.collection.mutable.HashMap[String, Int]"a" -> 100 等价于 ("a", 100);创建的另一种写法 Map(("a", 100), ("b", 90), ("c", 95))scores("a") //返回 Optionscores("d").getOrElse(0) // 返回实际值scores("a") = 80scores += ("d" -> 70, "e" -> 50)scores -= "a"scores + ("d" -> 70, "e" -> 50)scores - "a"for((k,v) <- map) ...scala.collection.immutable.SortedMap("d" -> 1, "b" -> 2, "c" -> 3) // Map(b -> 2, c -> 3, d -> 1)scala.collection.mutable.LinkedHashMap("d" -> 1, "b" -> 2, "c" -> 3) // Map(d -> 1, b -> 2, c -> 3)scala.collection.JavaConverters
(k, v)val a = (1, 3.14, "hello")a._1 // 1val (first, second, _) = azip 方法
scala.collection.JavaConverters 可与 Java 集合互相转换scala.collection)、mutable(scala.collection.mutable) 和 immutable(scala.collection.immutable)
trait 或 class 的伴生对象中,都有 apply 方法,可直接构造集合实例,如 Array(1,2,3)Traversable 集合层级的顶部,只有 foreach 方法是抽象的,其他方法都可直接继承使用Iterable ,只有 iterator 方法是抽象的,其他方法都可直接继承使用
Traversable 的区别在于,iterator 带状态(可选择获取下一个元素的时间,在获取下一个元素之前会一直跟踪集合中的位置)Iterable 中的 foreach 通过 iterator 实现Seq 有序序列,包含 length,有固定下标
IndexedSeq 快速随机访问,通过 Vector 实现LinearSeq 高效的 head/ tail 操作,通过 ListBuffer 实现Set 无序集合、无重复元素
HashSet,即元素其实是按照对应的哈希值排序的
HashSet 中查找元素远快于在 Array 或 List 中查找Map 键值对集合,scala.Predef 提供了隐式转换,可直接使用 key -> value 表示 (key, value)
SortedMap 按 key 排序
Vector 带下标的集合,支持快速的随机访问,相当于 不可变的 ArrayBuffer
List 在随机访问上的缺陷Range 有序的整型集合,步长一致
1 to 10 by 3 即生成 1 到 10 的序列,步长为 3util 不包含上边界,to 包含上边界start, end, step 三个值List 有限的不可变序列
Nil,或包含两部分 head 元素和 tail (子 List):: 根据给定 head 和 tail 构建新的 List
1 :: 2 :: Nil 等价于 1 :: (2 :: Nil) // 结果 `List(1,2)根据 head, tail 的特性,可很容易进行递归操作
def multi(l: List[Int]): Int = l match {
case Nil => 1
case h :: t => h * multi(t)
}head, tail 只需要常数时间 O(1)O(1);可使用 mutable.ListBuffer 可在头部 或 尾部进行增/删元素操作O(N)SortedSet 有序集合,按顺序访问元素,默认实现为红黑树
immutable.BitSet 非负整数集合,底层使用 Long 数组存储
1101,即十进制的 13ListMap
LinkedList 来表示 MapMap 要慢,因此使用较少
List 的 head)Stream 与 List 类似,但其元素都是延迟计算的
force 来强制进行计算所有元素#:: 构造,1 #:: 2 #:: 3 #:: Stream.empty 结果为 Stream(1, ?) 此处只打印了 head 1,而 tail 未打印,因为还未计算 tailimmutable.Stack LIFO 序列
push 入栈 , pop 出栈, top 查看栈顶元素List 包括(push = ::, pop = tail, top = head)immutable.Queue FIFO 序列
enqueue 入列,可使用集合做参数,一次性入列多个元素dequeue 出列,结果包含两部分 (element, rest)
ArrayBuffer
array 和 size (继承自 ResizableArray)Array 相同ListBuffer,类似于 ArrayBuffer 但是基于链表实现
LinkedList
LinkedHashSet 除了 Hash 的特点外,会记录元素插入的顺序
mutable.Queue
+= 添加单个元素;++= 添加多个元素dequeue 移除并返回队首元素mutable.Stack 与不可变版本相同,除了会对原数据发生修改
mutable.BitSet 直接修改原数据,更新操作比 immutable.BitSet 更高效
原文:https://www.cnblogs.com/yuanzam/p/11605561.html