Я переношу свою базу кода 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.TreeSetceilingKey,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