将Java TreeMap代码迁移到Scala?

pat*_*rit 19 java scala treemap treeset scala-collections

我正在将我的Java代码库迁移到纯Scala,我仍然坚持使用这一段代码.我有一个让我们的IntervalMap即数据结构的实现你有效地映射范围[from,to]values了哪里set,deleteget操作都O(log n)(从IntervalTree或线段树略有不同).

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

  1. Scala没有mutable.TreeMap- 我决定通过使用mutable.TreeSet(奇怪的是Scala mutable.TreeSet但没有mutable.TreeMap)来存储密钥并将值存储在辅助中mutable.Map.这是一个不愉快的黑客,但还有更好的方法吗?

  2. 接下来的问题是Scala的mutable.TreeSet没有类似的java.util.TreeSetceilingKey,floorEntry,pollFirst,pollLast这些都是O(log n)在Java操作.

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

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

Rex*_*err 13

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

Scala没有自己的所有副本,这是最值得注意的例外之一.与Java兼容的原因之一是您不必重新发明每个轮子.

您仍然希望使用Scala的原因是您编写的所有代码都不是关于此TreeMap的.你IntervalMap可以成为斯卡拉IntervalMap; 你只需在TreeMap内部使用Java 来实现它.或者你可以在Scala中使用不可变版本,它现在对于不可变版本表现得相当不错.

也许在2.11或2.12中会有一个可变的TreeMap; 它需要有人写它,测试它,优化它等等,但我不认为有这个有哲学上的反对意见.


pat*_*rit 0

Scala 2.12mutable.TreeMap终于有了:https ://github.com/scala/scala/pull/4504