无需迭代即可从地图中删除条目

mon*_*l86 9 java dictionary

如何在不使用值或键的迭代的情况下从Java中 删除条目Map.基本上在我的地图,我使用containsKey(),然后map.remove()将其删除.

Alf*_*rio 16

您可以使用要删除的元素的键从地图中删除条目.

map.remove("aKey");
Run Code Online (Sandbox Code Playgroud)

如果你不知道元素的键,你必须迭代才能获得它,如下所示:

public static <T, E> Set<T> getKeysByValue(Map<T, E> map, E value) {
     Set<T> keys = new HashSet<T>();
     for (Entry<T, E> entry : map.entrySet()) {
         if (value.equals(entry.getValue())) {
             keys.add(entry.getKey());
         }
     }
     return keys;
} 
Run Code Online (Sandbox Code Playgroud)

这将返回在地图上找到的所有键.


mo *_*ean 8

Map<Integer, String> abcMap = new HashMap<Integer, String>();
abcMap.put(1,"A");
abcMap.put(2,"B");
abcMap.put(3,"C");

/// now for remove item
abcMap.remove(1);
// this will remove "A" from abcMap..
Run Code Online (Sandbox Code Playgroud)


小智 6

在大多数情况下,您可以使用Map.remove(key)方法从地图中删除条目(键值对).地图上没有迭代.你Map.containsKey(key)之前不需要使用Map.remove(key)因为Map.remove已经这样做了.它与返回无论是先前的相关值key或者null是否有对没有映射关系key.

但是你不能只使用一个值(没有键)来做同样的事情.唯一的选择是通过map迭代并查找具有该值的条目(或条目).

Java 5-7:

for (Iterator<MyValue> it = map.values.iterator(); it.hasNext(); ) {
    if(it.next().equals(myValue)) {
        it.remove();
    }
}
Run Code Online (Sandbox Code Playgroud)

Java 8:

map.values().removeIf(v -> v.equals(myValue));
Run Code Online (Sandbox Code Playgroud)


ζ--*_*ζ-- 4

使用Map#remove(Object key)

public V remove(Object key)
Run Code Online (Sandbox Code Playgroud)

从此映射中删除该键的映射(如果存在)(可选操作)。更正式地说,如果此映射包含从键 k 到值 v 的映射(key==null ? k==null : key.equals(k)),使得 ,则删除该映射。(该映射最多可以包含一个这样的映射。)

返回映射先前与该键关联的值;如果映射不包含该键的映射,则返回 null。(如果实现支持 null 值,则 null 返回还可以指示映射先前将 null 与指定键相关联。)调用返回后,映射将不包含指定键的映射。

基本上你可以调用remove,即使密钥不存在。在这种情况下它会默默地失败(返回 null)。yourKey.equals(key)如果您要删除的密钥为 true ,则该对象不必相同或相同。