19

Java コード ベースを純粋な Scala に移行していますが、この 1 つのコードに行き詰まっています。私は IntervalMap の実装を持っています。つまり、範囲を効率的にマッピングできるデータ構造を持ってい[from,to]ます。valuessetdeletegetO(log n)

このコードは Java を使用してjava.util.TreeMapsおり、Scala への移行中に 2 つの大きな問題に遭遇しました。

  1. Scalaにはありませんmutable.TreeMap-キーを保存し、値をauxiliaryに保存するためにmutable.TreeSet(奇妙なことにScalaにはありますmutable.TreeSetが、ありません)を使用して回避することにしました。これは不愉快なハックですが、もっと良い方法はありますか?mutable.TreeMapmutable.Map

  2. 次の問題は、Scalaには、Javaのすべての操作である、、にmutable.TreeSet相当するものがないことです。java.util.TreeSetceilingKeyfloorEntrypollFirstpollLastO(log n)

では、コードを Scala に移行するにはどうすればよいでしょうか? このような状況でのベスト プラクティスは何ですか? 独自のツリー実装を書きたくありません。私が気付いていない IntervalMaps を書くより慣用的な Scala の方法はありますか? それとも、評判の良いライブラリがありますか?それとも、Scala は、そのツリーセットと存在しない TreeMaps を追加しただけで、ここで単純に吸うことができますか。もちろん、私はTreeMapScala で Java を使用することもできますが、それは見苦しく、素晴らしい Scala コレクション機能をすべて失うので、Java を使用したほうがよいでしょう。

これが私の現在のJavaコードです: https://gist.github.com/pathikrit/5574521

4

4 に答える 4

13

残念ながら、答えは JavaTreeMapクラスを使用することです。

Scala にはすべての独自のコピーがあるわけではなく、これは最も注目すべき例外の 1 つです。Java 互換である理由の 1 つは、すべての車輪を再発明する必要がないことです。

それでも Scala を使用したい理由は、作成するコードのすべてがこの TreeMap に関するものではないからです。あなたIntervalMapは Scala にすることができますIntervalMap。JavaTreeMapを内部的に使用して実装するだけです。または、Scala で不変バージョンを使用することもできます。これは、現在、不変バージョンに対してかなり適切に機能します。

おそらく 2.11 または 2.12 には mutable がありTreeMapます。誰かがそれを書いたり、テストしたり、最適化したりする必要がありますが、それを持つことに哲学的な異議があるとは思いません。

于 2013-05-14T15:37:20.627 に答える
0

素敵な Scala コレクション機能を使いたいようです。クラスを再実装する必要はないと思います。

見たことがありますscala.collection.JavaConversionsか?

ラッパーを使用して同様のアプローチに従い、それに応じて必要なメソッドを実装できます。マップの種類に固有の方法を定義して使用する方法について、より創造的である必要があるかもしれませんが、大したことではありません。

これがあなたにアイデアを与えることを願っています。ご不明な点がございましたら、お気軽にお問い合わせください (ご質問からしばらく時間が経っているようです)。

于 2015-04-16T13:14:27.353 に答える