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

scala – MutableList和ListBuffer之间的区别

发布时间:2020-12-16 09:45:53 所属栏目:安全 来源:网络整理
导读:Scala的MutableList和ListBuffer类在scala.collection.mutable中有什么区别?你什么时候使用一个对另一个? 我的用例有一个线性序列,我可以有效地删除第一个元素,前缀和附加。这是什么最好的结构? 解决方法 有关他们如何工作的一点解释。 ListBuffer内部
Scala的MutableList和ListBuffer类在scala.collection.mutable中有什么区别?你什么时候使用一个对另一个?

我的用例有一个线性序列,我可以有效地删除第一个元素,前缀和附加。这是什么最好的结构?

解决方法

有关他们如何工作的一点解释。

ListBuffer内部使用Nil和::来构建一个不可变的列表,并允许定期删除第一个和最后一个元素。为了做到这一点,它保留了一个指针列表的第一个和最后一个元素,并且实际上允许改变(否则不可变)::类的头和尾(私有[scala] var成员允许的好的技巧::)它的toList方法也会在常量时间内返回正常的不可变列表,因为它可以直接返回内部维护的结构。它也是不可变列表的默认构建器(因此实际上可以合理地预期具有常量附加)。如果调用toList,然后再将一个元素附加到缓冲区,则相对于缓冲区中当前的元素数量,它需要线性时间才能重建一个新的结构,因为它不能再突变导出的列表。

MutableList在内部使用LinkedList,而不是(公开地,不像:)可变链接列表实现,它知道它的元素和后继(如::)。 MutableList还保留指向第一个和最后一个元素的指针,但是toList返回线性时间,因为结果List是从LinkedList构造的。因此,在导出列表后,不需要重新初始化缓冲区。

根据您的要求,我会说ListBuffer和MutableList是等价的。如果你想在某个时候导出他们的内部列表,那么问问自己你想要的开销:当你导出列表,然后没有开销,如果你去突变缓冲区(然后去MutableList),或者只有当你变得可变缓冲区再次,导出时没有(然后去ListBuffer)。

我的猜测是,在2.8集合大修中,MutableList早于ListBuffer和整个Builder系统。实际上,MutableList在collection.mutable包中是非常有用的:它有一个private [mutable] def toLinkedList方法,它可以在常量时间内返回,因此可以有效地用作内部维护LinkedList的所有结构的委托生成器。

所以我也推荐使用ListBuffer,因为它可能还会得到注意和优化,比“纯可变”的结构,如MutableList和LinkedList。

(编辑:李大同)

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

    推荐文章
      热点阅读