scala中List、Array、ListBuffer、ArrayList、Set


一、List

List列表:不可变。LIst支持在头部快速添加和移除条目,但是不提供快速按下标访问的功能,这个功能需要线性遍历列。

List列表跟数组非常像,两者都是同构的,同一个列表的所有元素必须是相同类型。

但是有2个重要区别:

  • List是不可变的,元素不能通过赋值改变。
  • 列表的结构是递归的(即链表,linkedList),而数组是平等的。

toList、toArray相互转换:

scala> Array(1,2,3).toList
res14: List[Int] = List(1, 2, 3)scala> List(1,2,3).toArray
res15: Array[Int] = Array(1, 2, 3)

二、Array

Array数组:可变。提供下标高效访问(获取或更新)指定位置的元素值。

三、LIstBuffer

列表缓冲LIstBuffer:可变。ListBuffer,提供了常量时间的往后追加和往前追加的操作,最后调用toList获取List。

四、ArrayBuffer

数组缓冲ArrayBuffer:可变。
所有的Array操作在ArrayBuffer都可用。不过由于实现的包装,会稍慢一些。

新的添加和移除操作平均而言是常量时间,不过偶尔会需要线性的时间,这是因为其实现需要不时地分配新的数组来保存缓存的内容。

五、Set

集Set,提供了可变和不可变。每个元素对象最多出现一次。