首页 > 解决方案 > 在 Scala 中将元素附加到类似列表的集合中最有效的结构是什么?

问题描述

我必须将元素附加到我的收藏中。哪种结构更可取?附加List成本 O(n),那么ListBuffer, ArrayBuffer, Set,Map和其他结构呢?

标签: scalacollections

解决方案


ListBuffer根据文档:

它提供恒定的时间前置和附加。

但它是可变结构,所以要小心使用——最好在非常有限的范围内(例如函数或方法)。

ArrayBuffer根据文档:

前置和删除在缓冲区大小中是线性的。

因为这种结构建立在动态数组之上,因此有时需要内部数组副本来重新创建,这在 JVM 中几乎是恒定的,但仍然不是完全恒定的时间。有关更多详细信息,请参阅System.arraycopy文档。也是可变结构。

Set, Map- 根本不是你所说List的 -like。Set- 无序(列表有序的)结构,仅包含唯一元素。Map[K, V]- 顾名思义,存储K类型键到V类型值之间的映射。

所以作为结论:如果您需要append元素,我建议您使用ListBuffer,但由于这是可变结构限制范围,只要您需要将其传递到某个地方,它的使用广告 - 将其转换为List.


推荐阅读