1. 解决方案
实际上Scala的容器分为三大类:Seq,Map,Set。Seq容器线性地存储了元素,这些元素或者被以数组加索引的形式存储,或者使用链表的方式存储。Map存储的是键值对,当你想用(key-value)形式时可以使用Map。而Set存储的事不可重复的元素。
2. 选择一个合适的Sequence
当你想选择一个Seq来使用的时候,你需要考虑两件事:1. 使用索引来快速访问你的容器(数组)中的内容,还是使用链表方式;2. 你的容器中的内容是可变的还是不可变的
Scala中对于Seq,针对:数组/链表,可变/不可变的组合,推荐使用以下四种通用容器类。
通过表(10-1)我们可以看出,如果你想使用一个不可变的带索引的容器,你应该选择Vector,如果你想使用一个可变的带索引的容易你应该选择ArrayBuffer。同样的List和ListBuffer为链式存储的不可变和可变容易。
主要的不可变序列选择表,其中List和Vector是我们通常情况下使用的不可变容器。Queue为先进先出的链式结构,Range为一个带索引的序列,Stack为后进先出的链式结构,Stream则是一个懒加载的List。String比较特殊,作为一个字符串类,实际上它是一个不可变的字符序列(index方式存储)。
可变序列选择表,Array和ArrayBuffer的区别是,Array不可改变大小;ArrayStack是一个后进先出且以Index方式存储的容器;DoubleLinkedList是一个可变双向链表,它的删除效率非常高;LinkedList是一个可变单项链表,ListBuffer使用起来喝ArrayBuffer一样,但是如果你计划吧一个ArrayBuffer转化为一个链表那么你使用ListBuffer会比较好;MutableList是一个可变单向链表,但是可以在常数时间内添加元素;Queue和Stack就是一个可变的先进先出和后进先出结构;StringBuilder则是一个可变的String。
选择一个map比选择一个Seq要简单多,你可以直接使用可变的和不可变的Map。SortedMap不可变但是其内容是按key值排序的;LinkedHashMap是可变的,其内容按插入的顺序存储;ListMap则是按插入顺序反序存储;TreeMap是使用红黑树存储
选择一个Set,Set像Map一样,可以直接使用可变与不可变的Set。SoredSet是按内容排序存储;LinkedHashSet是按插入顺序存储;ListSet可以想使用List一样使用,按插入顺序反序存储;
来源:oschina
链接:https://my.oschina.net/u/2633112/blog/651561