在 Java 中,从 Map by 值中删除元素的最快方法是什么?

2022-09-01 03:22:33

在 Java 中,从 Map by 值中删除元素的最快方法是什么?

目前我正在使用:

    DomainObj valueToRemove = new DomainObj();
    String removalKey = null;

    for (Map.Entry<String, DomainObj> entry : map.entrySet()) {
        if (valueToRemove.equals(entry.getValue())) {
            removalKey = entry.getKey();
            break;
        }
    }

    if (removalKey != null) {
        map.remove(removalKey);
    }

答案 1

正确和快速的单行实际上是:

while (map.values().remove(valueObject));

有点奇怪的是,上面的大多数例子都假设是唯一的。valueObject


答案 2

以下是单行解决方案:

map.values().remove(valueToRemove);

这可能比定义自己的迭代器更快,因为 JDK 集合代码已经过显著优化。

正如其他人所提到的,bimap将具有更快的值删除速度,尽管它需要更多的内存并且需要更长的时间来填充。此外,双映射仅在值唯一时才有效,这在代码中可能是也可能不是。


推荐