如何在不使用值或键的迭代的情况下从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)
这将返回在地图上找到的所有键.
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)
Run Code Online (Sandbox Code Playgroud)public V remove(Object key)从此映射中删除该键的映射(如果存在)(可选操作)。更正式地说,如果此映射包含从键 k 到值 v 的映射
(key==null ? k==null : key.equals(k)),使得 ,则删除该映射。(该映射最多可以包含一个这样的映射。)返回映射先前与该键关联的值;如果映射不包含该键的映射,则返回 null。(如果实现支持 null 值,则 null 返回还可以指示映射先前将 null 与指定键相关联。)调用返回后,映射将不包含指定键的映射。
基本上你可以调用remove,即使密钥不存在。在这种情况下它会默默地失败(返回 null)。yourKey.equals(key)如果您要删除的密钥为 true ,则该对象不必相同或相同。