加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

Scala:用于简单迭代的最有效的集合

发布时间:2020-12-16 18:23:47 所属栏目:安全 来源:网络整理
导读:我经常根据需要生成一个集合来保存实例数据大小.在收集垃圾之前,消费者可能只迭代一次该集合.消费者不关心集合的顺序,不需要对它进行排序肯定不需要改变它或其任何元素.什么是 Scala中最有效的类型安全集合? – 数组? 稍后编辑:我发现可能使用集合时可能
我经常根据需要生成一个集合来保存实例数据大小.在收集垃圾之前,消费者可能只迭代一次该集合.消费者不关心集合的顺序,不需要对它进行排序肯定不需要改变它或其任何元素.什么是 Scala中最有效的类型安全集合? – 数组?

稍后编辑:我发现可能使用集合时可能存在很多情况.在可能的情况下使用套件或仅在真正需要设置功能时使用它们是否合适?

解决方法

是的,在所有集合数据结构中,当您事先知道它们的大小时,数组的开销最小.

如果你不提前知道大小,我仍然会选择一个ArrayBuffer *.用于在空间不足时扩展底层数组的算法同样有效.

不要*使用(链接)List或Stream,因为这些类涉及每个元素一个堆分配.现代JVM垃圾收集器很好,但它们不能免费工作.

*:但请参阅@user unknown对某些微基准测试链接问题的评论.当前的ArrayBuffer实现可能不是最理想的.

还可以看看.view.通常,您不需要实际存储中间结果.相反,您可以使用.map,.filter和其他人来构建集合的“描述”.只有在迭代集合时才会执行操作(映射,过滤器等),通常在O(1)空间中.缺点是,每次查询时都会重新计算这些视图. (尽管使用简单的过滤器和巨大的底层集合,这可能仍然更有效)

另外,要特别注意可变数据结构的视图.视图不捕获底层数据结构的状态.当它改变时,视图也会改变.但是,不可变数据结构的视图表现得非常好.最后,视图显然包含对底层数据结构的引用,这意味着当程序保存到视图时,它不会被垃圾收集.

(更新)载体似乎在存储效率与灵活性之间取得了很好的平衡,特别是对于大型序列.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读