Sto migrando il mio codice Java in puro Scala e sono bloccato on this one piece of code. Ho un'implementazione di un IntervalMap, ovvero una struttura dati che consente di mappare in modo efficiente gli intervalli da [from,to]
a values
dove le operazioni , delete
e get
sono tutte O(log n)
(leggermente diverse da un intervallo o un segmento).Migrazione del codice TreeMap Java su Scala?
Questo codice utilizza Java di java.util.TreeMaps
e durante la migrazione a Scala, mi sono imbattuto in 2 grandi temi:
Scala non ha
mutable.TreeMap
- ho deciso di andare intorno ad esso utilizzandomutable.TreeSet
(stranamente Scala hamutable.TreeSet
ma nonmutable.TreeMap
) per la memorizzazione delle chiavi e la memorizzazione dei valori in un ausiliariomutable.Map
. Questo è uno spiacevole trucco, ma c'è un modo migliore?problema successivo è di Scala
mutable.TreeSet
non ha equivalenti dijava.util.TreeSet
s'ceilingKey
,floorEntry
,pollFirst
,pollLast
che sono tutteO(log n)
operazioni in Java.
Quindi, come posso migrare al meglio il mio codice su Scala? Quali sono le migliori pratiche in queste situazioni? Non voglio davvero scrivere le mie implementazioni sugli alberi. C'è un modo più idiomatico di Scala di scrivere IntervalMaps di cui non sono a conoscenza? O c'è qualche biblioteca stimabile là fuori? O semplicemente Scala succhia qui con il suo TreeSet flessibile e TreeMaps inesistenti. Ovviamente posso usare Java TreeMap
in Scala ma è brutto e perdo tutte le belle funzionalità della collezione Scala e quindi potrei usare Java.
Ecco il mio codice Java corrente: https://gist.github.com/pathikrit/5574521
http://stackoverflow.com/questions/4531856/why-is-there-no-mutable-treemap-in-scala – assylias
Tale nesso in realtà non rispondere alla mia domanda su come effettivamente migrare il mio codice. Quali sono le migliori pratiche/idiomi, ecc? E, infine, non ho ancora un equivalente di 'floorEntry' – pathikrit