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

1. 解决方案

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

2. 选择一个合适的Sequence

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

    Scala中对于Seq,针对:数组/链表,可变/不可变的组合,推荐使用以下四种通用容器类。

173816_m3Pi_2633112.png

    通过表(10-1)我们可以看出,如果你想使用一个不可变的带索引的容器,你应该选择Vector,如果你想使用一个可变的带索引的容易你应该选择ArrayBuffer。同样的List和ListBuffer为链式存储的不可变和可变容易。

    主要的不可变序列选择表,其中List和Vector是我们通常情况下使用的不可变容器。Queue为先进先出的链式结构,Range为一个带索引的序列,Stack为后进先出的链式结构,Stream则是一个懒加载的List。String比较特殊,作为一个字符串类,实际上它是一个不可变的字符序列(index方式存储)。

174427_lZgz_2633112.png

    可变序列选择表,Array和ArrayBuffer的区别是,Array不可改变大小;ArrayStack是一个后进先出且以Index方式存储的容器;DoubleLinkedList是一个可变双向链表,它的删除效率非常高;LinkedList是一个可变单项链表,ListBuffer使用起来喝ArrayBuffer一样,但是如果你计划吧一个ArrayBuffer转化为一个链表那么你使用ListBuffer会比较好;MutableList是一个可变单向链表,但是可以在常数时间内添加元素;Queue和Stack就是一个可变的先进先出和后进先出结构;StringBuilder则是一个可变的String。

174822_d0fe_2633112.png

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

180017_EpRs_2633112.png

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

180515_GquF_2633112.png


转载于:https://my.oschina.net/nenusoul/blog/651561

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值