为什么不使用 Map#removeAll(Collection>) ?
为什么 Java 中的 Map
接口没有 removeAll(Collection c)
方法来删除键,就像它有 map.remove(Object )
?
我知道我总是可以做 map.keySet().removeAll(..)
.. 但这是 Map
没有 removeAll() 的原因吗
并鼓励我们使用 map.keySet().removeAll(..)
?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
集合 API 背后的理念是尽可能小且简单。 Map 上的 Collection 视图已经允许您执行此操作,因此不需要额外的方法。
keySet 方法返回地图的视图。对按键集的操作会反映在地图上。
关于接口设计的更普遍的问题:为什么接口 X 没有方便的方法 Y? 通过 Martin Fowler 对 MinimalInterface 与 HumaneInterface。
The philosophy behind the collections APIs is to be as small and simple as possible. The Collection views on Map allow you to perform this operation already, so there is no need for an extra method.
The keySet method returns a view of the Map. Operations on the key set are reflected on the map.
The more general question on interface design: Why doesn't interface X have convenient method Y? is addressed in more depth by Martin Fowler's discussion of MinimalInterface vs HumaneInterface.
因为Map不是Collection,不是继承Collection接口。地图实现使用集合接口来提供它们自己的功能。
想想这样的情况:
Map 可以提供方法:
,但在这种情况下,您有三种方法而不是一种。
因此,将removeAll方法放到Map接口中并不清楚应该检查和删除哪些类型的对象 - 键、值、两者或对。
Because Map is not Collection, not extends Collection interface. Maps implementations USE collection interface to provide they own functionallity.
Think about situation like this:
Map can provide methods:
but in this case you have three methods not one.
So put removeAll method to Map interface is not clear to understand wich types of objects should be check and remove - keys, value, both or pairs.