【问题标题】:Scala 2.11 LinkedList is deprecated, what should I use?Scala 2.11 LinkedList 已弃用,我应该使用什么?
【发布时间】:2015-02-17 21:08:06
【问题描述】:

根据the docsscala.collection.mutable.LinkedList 自 2.11 版本起已弃用。不幸的是,我没有找到可以替换它的东西。我需要一个可以在恒定时间内从 any 索引中删除项目的有序集合。

我应该使用什么?

【问题讨论】:

  • 你能确认答案吗?

标签: scala collections linked-list


【解决方案1】:

使用 MutableList 及其迭代器的remove 方法。它们提供 O(1) 移除。

http://docs.scala-lang.org/overviews/collections/concrete-mutable-collection-classes.html#linked_lists

【讨论】:

  • 我没有关注。如何使用 MutableList 从末尾移除 O(1)?
  • @kfer38因为有指向最后一个元素的指针,所以不需要遍历所有元素就可以移除最后一个元素。
  • 抱歉,MutableList 的迭代器没有remove 方法。这就是为什么stackoverflow.com/questions/2803085/…
【解决方案2】:

根据我对您的问题的了解,您希望遍历集合并即时更改它。对于除(现已弃用)scala.collection.mutable.LinkedListscala.collection.mutable.DoubleLinkedList 之外的集合构造,这是不可能的。这种操作并不真正遵循 Scala 集合理念,因此 LinkedListDoubleLinkedList 现在已被弃用。

但是,没有什么能阻止您在 Scala 代码中使用经典 Java 的 java.util.LinkedList 和相关迭代器。

除非您想检查您的设计并按照 Scala 的方式使用以下结构:mapfilterforfoldreduce 等。例如,使用 filter 函数,您可以创建一个仅包含相关项目的新列表。

【讨论】:

    【解决方案3】:

    大家好,从 2021 年开始 :) 2.12 版本的正确答案是正确的,但 2.13 - 实际上是另一个。我会引用documentation

    collection.mutable.MutableList(在 2.12 中没有被弃用,但在 被认为是实现其他的实现细节 集合)。请改用 ArrayDeque 或 mutable.ListBuffer,或 列表和一个 var ;

    【讨论】:

      猜你喜欢
      • 2016-10-14
      • 1970-01-01
      • 1970-01-01
      • 2019-08-28
      • 2010-09-17
      • 1970-01-01
      • 2019-03-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多