我一直在尝试在Android上使用TreeMaps并遇到以下两个问题:
java.lang.NoSuchMethodError: java.util.TreeMap.lowerEntry
为什么来迎接我?根据
the documentation,自API 1以来应该支持TreeMap,没有?基本上,我需要一个提供超快速映射的数据结构,由稀疏整数键“索引”(例如,它包含键2,100,29392,399391,...的条目)。它需要能够快速执行以下操作:
所以,基本上我需要TreeMap的get
,put
,remove
,values
,clear
,ceilingEntry
或higherEntry
,以及lowerEntry
或floorEntry
。 (对于最后两个,任何一个选项都可以,因为可以通过将参考键递增或递减1来转换为另一个选项)
TreeMap有什么替代品可以很好地运行,并且可以在所有Android设备上使用,或者我可以包含在我的应用程序中吗?
更新 我需要向Android或任何参与构建TreeMap的人道歉:由于一些愚蠢的逻辑错误,我调用TreeMap方法的次数比我想象的要多一倍。性能实际上非常好。我只是被弱智......所以,第2点不再是一个问题。离开点1.对不起,大家......
答案 0 :(得分:2)
您可以通过一些技巧模拟一些NavigableMap
方法。例如,ceilingEntry
大约相当于tailMap(key).entrySet().iterator().next()
,但如果没有条目而不是返回null,它将抛出。 (只需在迭代器上使用hasNext()
来解决这个问题。)
lowerEntry
更难;您可以执行headMap(key).lastKey()
并在其上调用get
以获取整个条目。 higherEntry
和floorEntry
仍然比较难,但你说的并不是绝对必要的。
答案 1 :(得分:0)
- 旧Android系统上缺少方法:
醇>
您可以通过将代码复制到您的应用中来自行向后移植 https://android.googlesource.com/platform/libcore/+/refs/heads/master/luni/src/main/java/java/util/TreeMap.java
- 在其他设备上绝对糟糕的表现:
醇>
也许两者都会让你处于更好的状态。
HTHS