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

时间:2017-03-11 01:09:00

标签: java android time-complexity

在我的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解决方案?

1 个答案:

答案 0 :(得分:3)

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

正如您所看到的,您可以从TreeMap更整齐,更有效地批量删除条目。这将是O(logN)操作。但缺点是插入和删除是O(logN)而不是O(1)

LinkedHashMap可以在某些用例中提供帮助,但不能在这个用例中提供帮助。 (它根据插入顺序对条目进行排序,而不是按键的值。)