java - 将 Java TreeMap 代码迁移到 Scala?

标签 java scala scala-collections treemap treeset

我正在将我的 Java 代码库迁移到纯 Scala,但我被卡住了 on this one piece of code .我有一个 IntervalMap 的实现,即一个数据结构,可以让你有效地将范围 [from,to] 映射到 values 其中 set, deleteget 操作都是 O(log n) (与 IntervalTree 或 SegmentTree 略有不同)。

此代码使用 Java 的 java.util.TreeMaps,在迁移到 Scala 时,我遇到了 2 个大问题:

  1. Scala 没有 mutable.TreeMap - 我决定使用 mutable.TreeSet 绕过它(奇怪的是 Scala 有 mutable.TreeSet 但没有 mutable.TreeMap) 用于存储键并将值存储在辅助 mutable.Map 中。这是一个令人不快的 hack,但有没有更好的方法?

  2. 下一个问题是Scala的mutable.TreeSet没有java.util.TreeSetceilingKey, floorEntrypollFirstpollLast这些都是Java中的O(log n)操作。

那么,我怎样才能最好地将我的代码迁移到 Scala?在这些情况下,最佳实践是什么?我真的不想编写自己的树实现。有没有更惯用的 Scala 方式来编写我不知道的 IntervalMaps?或者那里有一些著名的图书馆?或者 Scala 只是用它的 gimped TreeSet 和不存在的 TreeMaps 简单地吸吮这里。当然,我可以在 Scala 中使用 Java 的 TreeMap ,但这很丑,而且我失去了所有漂亮的 Scala 集合功能,我还不如使用 Java。

这是我当前的 Java 代码:https://gist.github.com/pathikrit/5574521

最佳答案

不幸的是,答案是只使用 Java TreeMap 类。

Scala 没有自己的一切副本,这是最值得注意的异常(exception)之一。它与 Java 兼容的原因之一是您不必重新发明每个轮子。

你仍然想使用 Scala 的原因是 你写的每一段代码都不是关于这个 TreeMap 的。您的 IntervalMap 可以是 Scala IntervalMap;您只需在内部使用 Java TreeMap 来实现它。或者您可以使用 Scala 中的不可变版本,它现在对于不可变版本的性能相当不错。

也许在 2.11 或 2.12 中会有一个可变的 TreeMap;它需要有人编写、测试、优化等,但我认为拥有它在哲学上没有异议。

关于java - 将 Java TreeMap 代码迁移到 Scala?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16538641/

相关文章:

java - Spark 中对 JAVA 的 SQL 查询

scala - Scala最终阻止关闭/刷新资源

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

Scala 映射到 Java HashMap

scala - 展平任意嵌套的编解码器?

scala - 在 scala 中,如何以正确的顺序从映射中获取键和值的数组(第 i 个键用于第 i 个值)?

java - 询问号码时无限循环

java - 在 Android 中用图像拼写单词

java - Java 仍在使用的已弃用语言代码列表在哪里?

java - Scala 和 SparkJava,如何使用 lambda 表达式