如何在不使用值或键的迭代的情况下从 Java Map
中删除条目。基本上在我的地图中,我使用containsKey()
然后使用map.remove()
将其删除。
答案 0 :(得分:16)
使用要删除的元素的键从地图中删除条目。
map.remove("aKey");
如果你不知道元素的键,你必须迭代才能获得它:
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;
}
这将返回在地图上找到的所有密钥。
答案 1 :(得分: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..
答案 2 :(得分:5)
在大多数情况下,您可以使用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();
}
}
Java 8:
map.values().removeIf(v -> v.equals(myValue));
答案 3 :(得分:3)
public V remove(Object key)
如果存在此键,则从此映射中移除此键的映射(可选操作)。更正式地说,如果此映射包含从键k到值v的映射,使得
(key==null ? k==null : key.equals(k))
,则删除该映射。 (地图最多可以包含一个这样的映射。)返回映射先前与该键关联的值,如果映射不包含此键的映射,则返回null。 (如果实现支持空值,则null返回还可以指示映射先前将null与指定键关联。)一旦调用返回,映射将不包含指定键的映射。
基本上你可以调用删除,即使密钥不存在。在这种情况下它会静默失败(返回null)。如果yourKey.equals(key)
对于要删除的键为true,则对象不必相同或相同。
答案 4 :(得分:2)
public Object remove(Object key)
remove
中的 Map
方法。
来自javadoc:
如果存在此键,则从此映射中移除此键的映射(可选操作)。更正式地说,如果此映射包含从键k到值v的映射,则(key==null ? k==null : key.equals(k)),
该映射被删除。 (地图最多可以包含一个这样的映射。)
返回映射先前与关键字关联的值,如果映射不包含此键的映射,则返回null
。 (如果实现支持null
值,则null
返回还可以指示映射先前已将null
与指定键关联。)映射将不包含指定键的映射呼叫返回。
<强>参数:强>
key - 要从地图中删除其映射的键。
<强>返回强>:
与指定键关联的上一个值,如果没有键的映射,则为null
。
示例:强>
Map<Integer, String> map=new HashMap<>();
map.put(20, "stackOverflow");
System.out.println(map.remove(20));
此代码将打印"stackOverflow"
,即与指定键关联的Previous值。希望能帮助到你。
答案 5 :(得分:1)
使用Map
's remove
method,它将一个键作为参数。你不需要原始物体;您只需要一个与地图中现有关键字相等的对象equals
,并生成与地图中现有关键字相同的hashCode
。
答案 6 :(得分:1)
似乎这里没有人真正回答过OP的问题。他们在不使用迭代器的情况下询问如何使用值或键&#34; 删除条目&#34;当然,如果您有密钥,remove(key)
可以正常工作,但如果您正在搜索值,则无效。
Alfredo's answer最接近,因为它搜索Map
的值侧,但它使用迭代器。
以下是使用Java 8 Stream
API的解决方案;没有迭代器:
Map<K, V> newMap = map.entrySet().stream()
.filter(entry -> !entry.getKey().equals(searchValue))
.filter(entry -> !entry.getValue().equals(searchValue))
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));
(替换K
和V
代替您的键和值类型。)
答案 7 :(得分:0)
public static void main(String[] args) {
//Constant.mapCustomer.remove("s");
Map<String, String> mapCustomer=new HashMap<String, String> ();;
mapCustomer.put("s","ss");
System.out.println(mapCustomer.get("s"));
mapCustomer.remove("s");
System.out.println(mapCustomer.get("s"));
}
答案 8 :(得分:-1)
假设地图有一些条目::Map
要从地图中删除索引 i 处的条目(不进行迭代),您需要将地图 keySet 转换为列表。
List
使用索引获取条目。
Map.Entry
从地图中删除条目
map.remove(entry.getKey());