我一直试图在Android上使用TreeMaps,并遇到了以下两个问题:
java.lang.NoSuchMethodError: java.util.TreeMap.lowerEntry
为什么?根据文献资料,应该支持TreeMap,因为API 1,不是吗?基本上,我需要一个数据结构,它提供一个超快的映射,由稀疏整数键“索引”(例如,它包含键2、100、29392、399391、.)的条目。它需要能够快速执行以下操作:
所以,基本上我需要树状地图的get,put,remove,values,clear,ceilingEntry或higherEntry,lowerEntry或floorEntry。(对于最后两个选项,任何一个选项都可以,因为一个选项可以通过增加或减少引用键1来转换为另一个选项)
除了TreeMap,还有其他的选择吗?它的性能很好,可以在所有的安卓设备上使用,或者我可以在我的应用程序中使用?
更新:我需要向安卓或参与构建TreeMap的人道歉:由于一些愚蠢的逻辑错误,我给TreeMap方法打了很多次电话,比我想象的还要多。表演真的很好。我只是有点迟钝..。因此,第2点不再是人们关注的问题。离开1点。抱歉,各位.
发布于 2015-08-05 21:24:44
您可以用一些诡计来模拟一些NavigableMap方法。例如,ceilingEntry大约等同于tailMap(key).entrySet().iterator().next(),但是如果没有条目,它将抛出,而不是返回null。(只需在迭代器上使用hasNext()来解决这个问题。)
lowerEntry更难;您可以执行headMap(key).lastKey()并调用get来获取整个条目。higherEntry和floorEntry更加困难,但您已经说过,这并不是绝对必要的。
发布于 2015-08-05 20:25:17
通过从https://android.googlesource.com/platform/libcore/+/refs/heads/master/luni/src/main/java/java/util/TreeMap.java将代码复制到应用程序中,您可以自己移植它。
也许两种方法都能让你的状态更好。
HTHs
https://stackoverflow.com/questions/31841974
复制相似问题