我有一个和能够将一系列键映射到值的数据结构中提到的问题几乎相同,但是针对的是Scala。
也就是说,我想要一个可变的一维非重叠区间[a[i], b[i]),它将映射到某种值v[i]。用于执行这种工作的标准底层数据结构是红黑树。
我希望它具有以下操作,最好所有操作的复杂度都为O(log n):
- 通过指定其中任何一个点来查询并获取给定范围(起始、结束、存储值)或其缺失情况
- 向此结构中插入新范围
- 从结构中删除范围
因此,我认为目前有以下几种变体,它们都有缺点:
- 在Java的TreeMap之上自己构建容器-快速而简单,但由于缺乏适当的维护可能会在长期内变得糟糕
- 使用Guava的RangeMap-可能,但在Scala集合世界中可能会非常笨拙
- 尝试使用Scala的红黑树实现并自己构建,然而,我猜这将会非常困难,因为Scala的TreeMap仅限于不可变类型,并且缺少直接的查找方法,例如Java的TreeMap
floorEntry
我错过了什么吗?是否有任何类似Guava的、基于Scala API的、扩展基本Scala集合的、良好维护的集合扩展库?
强相关问题:
- 将Java TreeMap代码迁移到Scala? - 提到“只需使用Java的TreeMap”并忘记其他任何东西
- 此问题的Java版本:
map.from(x).firstKey()
代替map.floorEntry
吗? - maaartinusTreeMap
在简单性方面已经足够了。 - GreyCat