Java 如果我使用HashMap.values().remove()从HashMap中删除一个值,这会从映射中删除完整的键/值记录吗?

Java 如果我使用HashMap.values().remove()从HashMap中删除一个值,这会从映射中删除完整的键/值记录吗?,java,Java,假设我需要按值删除HashMap中的某些内容 我可以这样做: myMap.values().remove("abc"); 但这是否也会删除指向该值的键?我可以确定完整的键->值行已经消失了吗 1 -> a 2 -> ab 3 -> abc 4 -> abcd 完成此操作后,我是否确定HashMap中填写的条目列表为3 在内部,Java如何知道相应的键也应该被删除?毕竟,我只是调用了一个通用的集合Remove。 返回此映射中包含的值的集合视图集合由映射支持,因此对映射的

假设我需要按值删除HashMap中的某些内容

我可以这样做:

myMap.values().remove("abc");
但这是否也会删除指向该值的键?我可以确定完整的键->值行已经消失了吗

1 -> a
2 -> ab
3 -> abc
4 -> abcd
完成此操作后,我是否确定HashMap中填写的条目列表为3

在内部,Java如何知道相应的键也应该被删除?毕竟,我只是调用了一个通用的集合Remove。

返回此映射中包含的值的集合视图集合由映射支持,因此对映射的更改将反映在集合中,反之亦然。如果在集合上进行迭代时修改映射(通过迭代器自己的删除操作除外),则迭代的结果将不定义集合支持元素移除,通过Iterator.remove、collection.remove、removeAll、retainal和clear操作从映射中移除相应的映射。

所以,是的。从
values()
视图中删除保证从基础映射中删除整个映射

对于您给出的示例,是,条目
3->abc
将被删除

在内部,Java如何知道相应的键也应该被删除?毕竟,我只是调用一个通用的集合

Collection
implementation,它返回的
map.values()
是一个特殊的实现,它是根据基础映射实现的,而不是像
ArrayList
这样的普通
集合。因此,对
Map.values()
返回的
集合
执行
remove
,操作在基础地图数据结构上。

返回此映射中包含的值的集合视图集合由映射支持,因此对映射的更改将反映在集合中,反之亦然。如果在集合上进行迭代时修改映射(通过迭代器自己的删除操作除外),则迭代的结果将不定义集合支持元素移除,通过Iterator.remove、collection.remove、removeAll、retainal和clear操作从映射中移除相应的映射。

所以,是的。从
values()
视图中删除保证从基础映射中删除整个映射

对于您给出的示例,是,条目
3->abc
将被删除

在内部,Java如何知道相应的键也应该被删除?毕竟,我只是调用一个通用的集合

Collection
implementation,它返回的
map.values()
是一个特殊的实现,它是根据基础映射实现的,而不是像
ArrayList
这样的普通
集合。因此,对于
Map.values()
返回的
Collection
remove
的实现在基础地图数据结构上运行

我只是调用一个通用的集合

就像你说的,它调用哪个状态

从该集合中删除指定元素的单个实例(如果存在)(可选操作)。更正式地说,如果这个集合包含一个或多个这样的元素,则删除一个元素e,使得(o==null?e==null:o.equals(e))。如果此集合包含指定的元素,则返回true(如果此集合因调用而更改,则返回等效值)

由于HashMap没有排序,它将删除第一个条目,该条目具有通过迭代这些值找到的匹配值

我只是调用一个通用的集合

就像你说的,它调用哪个状态

从该集合中删除指定元素的单个实例(如果存在)(可选操作)。更正式地说,如果这个集合包含一个或多个这样的元素,则删除一个元素e,使得(o==null?e==null:o.equals(e))。如果此集合包含指定的元素,则返回true(如果此集合因调用而更改,则返回等效值)


由于HashMap没有排序,它将删除第一个条目,该条目有一个匹配的值,它通过迭代这些值找到该值。

我真的很惊讶文档中没有涉及到这一点。@djechlin文档中对此进行了解释。检查Louis的答案。你可以编写一个单元测试并检查结果。@LuiggiMendoza啊,OP当时可能没有检查文档。我真的很惊讶文档中没有包括这一点。@djechlin文档中对此进行了解释。检查Louis的答案。你可以编写一个单元测试并检查结果。@LuiggiMendoza啊,OP当时可能没有检查文档。虽然这说明它支持删除,但没有说明它的行为。@PeterLawrey,不清楚OP在问什么,如果有的话?他们问“我能保证HashMap中填写的条目列表是3吗?”这是一句毫无意义的句子。这不是胡说——我问的是,在这个操作之后,完整的键/值对是否消失了,可用的记录大小是3而不是4。@geneb。--那么问题应该是这个列表是否有3个大小。你问这个列表是否是3,这没有意义。你为什么这么认为?这是一个非常好的方法。唯一的警告是,如果你已经在迭代地图的中间,那么你只能使用迭代器本身来进行删除。如果你没有在地图上迭代,那么这就很好了。虽然这说明它支持删除,但没有说明它的行为。@PeterLawrey,不清楚OP在问什么,如果有的话?他们问:“我能保证填写的条目是正确的吗?”