序列的操作有以下几种,如下表所示:

  • 索引检索操作(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 ISWHAT 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。