序列的操作有以下几种,如下表所示:
- 索引检索操作(indexOf、lastIndexOf、indexofSlice、lastIndexOfSlice、indexWhere、lastIndexWhere、segmentLength、prefixLength)用于返回等于给定值或满足某个谓词的元素的索引。
- 加法运算(+:,:+,padTo)用于在序列的前面或者后面添加一个元素并作为新序列返回。
- 排序操作(sorted, sortWith, sortBy)根据不同的条件对序列元素进行排序。
- 反转操作(reverse, reverseIterator, reverseMap)用于将序列中的元素以相反的顺序排列。
- 多集操作(intersect, diff, union, distinct)用于对两个序列中的元素进行类似集合的操作,或者删除重复元素。如果一个序列是可变的,它提供了另一种更新序列中的元素的,但有副作用的update方法,Scala中常有这样的语法,如seq(idx) = elem。它只是seq.update(idx, elem)的简写,所以update 提供了方便的赋值语法。应注意update 和updated之间的差异。update 再原来基础上更改序列中的元素,并且仅适用于可变序列。而updated 适用于所有的序列,它总是返回一个新序列,而不会修改原序列。
常用线性序列有 和scala.collection.immutable.Stream
。常用索引序列有 scala.Array scala.collection.mutable.ArrayBuffer
。Vector 类提供一个在索引访问和线性访问之间有趣的折中。它同时具有高效的恒定时间的索引开销,和恒定时间的线性访问开销。正因为如此,对于混合访问模式,vector是一个很好的基础。后面将详细介绍vector。
缓冲器
ListBuffer和ArrayBuffer是常用的buffer实现 。顾名思义,ListBuffer依赖列表(List),支持高效地将它的元素转换成列表。而ArrayBuffer依赖数组(Array),能快速地转换成数组。
Buffer类的操作
WHAT IT IS | WHAT IT DOES |
---|---|
加法: | |
buf += x | 将元素x追加到buffer,并将buf自身作为结果返回。 |
buf += (x, y, z) | 将给定的元素追加到buffer。 |
buf ++= xs | 将xs中的所有元素追加到buffer。 |
x +=: buf | 将元素x添加到buffer的前方。 |
xs ++=: buf | 将xs中的所有元素都添加到buffer的前方。 |
buf insert (i, x) | 将元素x插入到buffer中索引为i的位置。 |
buf insertAll (i, xs) | 将xs的所有元素都插入到buffer中索引为i的位置。 |
移除: | |
buf -= x | 将元素x从buffer中移除。 |
buf remove i | 将buffer中索引为i的元素移除。 |
buf remove (i, n) | 将buffer中从索引i开始的n个元素移除。 |
buf trimStart n | 移除buffer中的前n个元素。 |
buf trimEnd n | 移除buffer中的后n个元素。 |
buf.clear() | 移除buffer中的所有元素。 |
克隆: | |
buf.clone | 与buf具有相同元素的新buffer。 |