![](/img/trans.png)
[英]Why does java.util.Collection.remove() return a boolean?
[英]Why does java.util.Map.values() allow you to remove entries from the returned Collection
为什么java.util.Map.values()
允许您从返回的Collection中删除条目,因为根据值删除键值对是没有意义的? 执行此操作的代码将不知道要删除的值(以及因此的键)是从哪个键映射的。 特别是当存在重复值时,在该Collection上调用remove将导致删除意外的键。
根据值删除键值对是没有意义的
我认为你没有足够的想象力。 我承认可能没有广泛使用它,但会有一些有用的有效案例。
作为示例用例,假设您有一个名为contactList
的Map<Person, TelephoneNumber>
。 现在,您希望按本地搜索联系人列表进行过滤。
为此,您可以制作地图的副本localContacts = new HashMap<>(contactList)
并删除所有使用区域代码以外的区域代码开始的TelephoneNumber
映射。 这将是您想要遍历values
集合并删除一些values
的有效时间:
Map<Person, TelephoneNumber> contactList = getContactList();
Map<Person, TelephoneNumber> localContacts = new HashMap<Person, TelephoneNumber>(contactList);
for ( Iterator<TelephoneNumber> valuesIt = localContacts.values().iterator(); valuesIt.hasNext(); ){
TelephoneNumber number = valuesIt.next();
if ( !number.getAreaCode().equals(myAreaCode) ) {
valuesIt.remove();
}
}
特别是当存在重复值时,在该Collection上调用remove将导致删除意外的键。
如果要删除具有该值的所有映射,该怎么办?
它必须有一个remove
方法,因为它是Collection
的一部分。 鉴于此,它可以选择允许您删除值或抛出UnsupportedOperationException
。 由于您可能想要删除值的合理原因,为什么不选择允许此操作?
Map
删除它的每个实例。 简而言之:在很多情况下,这可能是有用的,实施它不会伤害任何不使用它的人,为什么不呢?
返回的Collection
是一个特殊的Collection
,它的语义使得它知道它中的值如何与它来自的Map
有关。 javadoc指示返回的集合支持的Collection
操作。
我认为基于密钥删除值通常是有用的; 其他答案显示例子。 鉴于此,如果您想删除某个值,为什么您只想删除它的一个特定键? 即使你这样做了,你也必须知道要删除哪个密钥(或者不是,视情况而定),然后你应该通过密钥将其删除。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.