如何删除键值大于定义值的哈希图中的所有项目



在我的Android项目中,我有一种方法使缓存无效(HashMap<Integer, Boolean>)。

我目前正在使用哈希图与第三方代码兼容。

我在这里找到了一个很好的答案,但它需要切换到三核。给定的解决方案是:

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);
    }
}

是否有更好的时间/复杂解决方案在哈希图中进行此操作,类似于Treemap解决方案?

如果您需要使用HashMap,则没有比迭代条目集更好(更有效)的解决方案,并且一次删除条目。这将是O(n)操作。您需要访问/测试地图中的所有条目。

正如您正确观察到的那样,您可以从TreeMap更整齐,更有效地删除条目。这将是O(logN)操作。但不利的一面是插入和删除是O(logN)而不是O(1)

LinkedHashMap可以在某些用例中提供帮助,但在此用例中无济于事。(它根据插入的顺序订购条目,而不是基于键的值。)

最新更新