第十章 Scala 容器(二):如何选择一个合适的容器类

1. 解决方案数组

    实际上Scala的容器分为三大类:Seq,Map,Set。Seq容器线性地存储了元素,这些元素或者被以数组加索引的形式存储,或者使用链表的方式存储。Map存储的是键值对,当你想用(key-value)形式时能够使用Map。而Set存储的事不可重复的元素。
ui

2. 选择一个合适的Sequence

    当你想选择一个Seq来使用的时候,你须要考虑两件事:1. 使用索引来快速访问你的容器(数组)中的内容,仍是使用链表方式;2. 你的容器中的内容是可变的仍是不可变的spa

    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。
table

    选择一个map比选择一个Seq要简单多,你能够直接使用可变的和不可变的Map。SortedMap不可变可是其内容是按key值排序的;LinkedHashMap是可变的,其内容按插入的顺序存储;ListMap则是按插入顺序反序存储;TreeMap是使用红黑树存储
效率

    选择一个Set,Set像Map同样,能够直接使用可变与不可变的Set。SoredSet是按内容排序存储;LinkedHashSet是按插入顺序存储;ListSet能够想使用List同样使用,按插入顺序反序存储;
容器

相关文章
相关标签/搜索