在我的Android项目中,我有一种方法可以部分地使缓存失效
(HashMap<Integer, Boolean>
)。
我目前正在使用HashMap与第三方代码兼容。
我找到了一个很好的答案here,但它需要切换到TreeMap。给定的解决方案是:
treeMap.tailMap(key).clear();
TreeMap解决方案比我在HashMap上的努力要好得多:
//where hashMap is a copied instance for the method
for (Integer key : hashMap.keySet()) {
if (key > minPosition) {
hashMap.remove(key);
}
}
是否有更好的时间/复杂性解决方案在HashMap中执行此操作,类似于TreeMap解决方案?
答案 0 :(得分:3)
如果您需要使用HashMap
,则没有比迭代条目集更好(更有效)的解决方案,并且一次删除一个条目。这将是O(N)操作。您需要访问/测试地图中的所有条目。
正如您所看到的,您可以从TreeMap
更整齐,更有效地批量删除条目。这将是O(logN)
操作。但缺点是插入和删除是O(logN)
而不是O(1)
。
LinkedHashMap
可以在某些用例中提供帮助,但不能在这个用例中提供帮助。 (它根据插入顺序对条目进行排序,而不是按键的值。)