为什么java.util.Map.values()
允许您从返回的Collection中删除条目,因为根据值删除键值对是没有意义的?执行此操作的代码将不知道要删除的值(以及因此的键)是从哪个键映射的。特别是当存在重复值时,在该Collection上调用remove将导致删除意外的密钥。
答案 0 :(得分:6)
根据值
删除键值对是没有意义的
我认为你没有足够的想象力。我承认可能没有使用 wide ,但是会有一些有用的情况。
作为示例用例,假设您有一个名为Map<Person, TelephoneNumber>
的{{1}}。现在,您希望按本地搜索联系人列表进行过滤。
要完成此操作,您可以复制地图contactList
并删除localContacts = new HashMap<>(contactList)
以区域代码而非本地区号开头的所有映射。这将是您想要遍历TelephoneNumber
集合并删除一些值的有效时间:
values
特别是当存在重复值时,在该Collection上调用remove会导致删除意外的键。
如果要删除具有该值的所有映射,该怎么办?
答案 1 :(得分:6)
它必须有remove
方法,因为它是Collection
的一部分。鉴于此,它可以选择允许您删除值或抛出UnsupportedOperationException
。由于您可能想要删除值的合理原因,为什么不选择允许此操作?
Map
。简而言之:在很多情况下这可能会有用,实施它不会伤害任何不使用它的人,为什么不呢?
答案 2 :(得分:0)
返回的Collection
是一个特殊的Collection
,它的语义使得它知道它中的值如何与它所来自的Map
相关。 javadoc表示返回的集合支持的Collection
操作。
答案 3 :(得分:0)
我认为基于密钥删除值通常是有用的;其他答案显示例子。鉴于此,如果您想删除某个值,为什么您只想删除它的一个特定键?即使你这样做了,你也必须知道你要删除哪个密钥(视情况而定),然后你应该通过密钥将其删除。