Я переношу свою базу кода Java в чистую Scala, и я застрял на этом одном фрагменте кода. У меня есть реализация IntervalMap, т.е. Структуры данных, которые позволяют эффективно отображать диапазоны [from,to]
в values
, где выполняются операции set
, delete
и get
O(log n)
(немного отличающиеся от IntervalTree или SegmentTree).
В этом коде используется Java java.util.TreeMaps
, а при переносе на Scala я столкнулся с двумя большими проблемами:
-
Scala не имеет
mutable.TreeMap
- я решил обойти его, используяmutable.TreeSet
(нечетно Scala имеетmutable.TreeSet
, но nomutable.TreeMap
) для хранения ключей и сохранения значений в вспомогательныйmutable.Map
. Это неприятный взлом, но есть ли лучший способ? -
Следующая проблема Scala
mutable.TreeSet
не имеет эквивалентаjava.util.TreeSet
ceilingKey
,floorEntry
,pollFirst
,pollLast
, которые являются всеми операциямиO(log n)
в Java.
Итак, как я могу лучше всего перенести свой код на Scala? Каковы наилучшие практики в этих ситуациях? Я действительно не хочу писать свои собственные реализации дерева. Есть ли более идиоматический способ Scala для записи IntervalMaps, о котором я не знаю? Или там какая-то уважаемая библиотека? Или Scala просто сосать здесь с его gimped TreeSet и несуществующими TreeMaps. Конечно, я могу просто использовать Java TreeMap
в Scala, но это уродливо, и я теряю все приятные функции коллекции Scala, и я мог бы также использовать Java.
Вот мой текущий код Java: https://gist.github.com/pathikrit/5574521