哪个scala可变列表可以使用?

Kar*_*lek 30 scala scala-collections

(把它作为这个问题的后续内容 - 没有Scala可变列表)

我想在scala中使用一个可变列表.我可以选择

哪个好,但是什么是"标准",推荐的,惯用的scala方式?我只想使用一个列表,我可以在后面添加东西.

编辑:

好的,进一步扩展.

我正在使用HashMap,其中"列表"(我的意思是一般意义上说)将是有价值的.然后,我正在读取文件中的内容,并且对于每一行,我想在散列映射中找到正确的列表并将值附加到列表中.

axe*_*l22 35

取决于你的需要.

DoubleLinkedList是一个链接列表,允许您在节点列表中来回遍历.使用它prevnext引用分别转到上一个或下一个节点.

LinkedList是一个单链表,所以没有prev指针 - 如果你只是一直遍历列表的下一个元素,这就是你需要的.

编辑:请注意,上面的两个内容旨在内部用作更复杂的列表结构的构建块,如MutableList支持高效追加的mutable.Queues 和s.

上面的两个集合都具有线性时间追加操作.

ListBuffer是一个缓冲类.虽然它由单链表数据结构支持,但它不会将next指针暴露给客户端,因此您只能使用迭代器和遍历它来遍历它foreach.但是,它的主要用途是作为一个缓冲区和一个不可变列表构建器 - 你可以通过它来附加元素+=,当你调用时result,你可以非常高效地恢复功能immutable.List.与可变和不可变列表不同,追加和前置操作都是常量时间 - 您可以+=非常有效地追加到最后.

MutableList在内部使用,除非您计划基于单链表数据结构实现自定义集合类,否则通常不使用它.例如,可变队列继承此类.MutableListclass还具有高效的常量时间追加操作,因为它维护对列表中最后一个节点的引用.

  • 象牙塔是一个相当强烈的声明。标准库中的类确实有一个名为“LinkedList”的用例,那就是构建更高的抽象。Scala 中的“LinkedList”基本上是一个链表节点,因此是双向链接“Queue”、“MutableList”和循环列表(即环)等类的构建块。在每个列表节点中存储长度、最后一个节点和类似节点是无意义的。**注意**:“LinkedList”并不意味着直接在典型的客户端代码中使用——“MutableList”、“Queue”、“immutable.ListBuffer”和“immutable.List”就是为此而存在的。 (2认同)

Dan*_*ner 17

为了阅读这个老问题的读者:文档的Concrete Mutable Collection Classes部分概述了可变列表类,包括何时使用哪一个的解释.


dre*_*xin 10

如果你想附加物品,你根本不应该使用它List.List当你想要预先添加项目时,s很好.请ArrayBuffer改用.

  • 我不同意.如果你不需要随机访问,`ListBuffer`比`ArrayBuffer`有更好的性能特征,需要不时调整大小.当然,追加操作可以在*摊销*常量时间或其他时间运行,这也不错,但我没有看到这里有任何"ArrayBuffer"的优点. (5认同)
  • @rolve最终摊位的常量时间通常更快,因为在JVM上分配新对象所涉及的常量(以及处理相关的GC压力)非常高,而调整大小的操作很少发生(平均每个项目都是复制两次).更不用说ArrayBuffer的缓存局部性优势,这在现代CPU上可能是巨大的. (5认同)
  • @JohnColanduoni自我发表评论近3年后,我同意`ArrayBuffer`可能是更好的选择.无论如何,应该使用实际的性能测量作为讨论的基础.:) (3认同)