为什么不使用 Map#removeAll(Collection) ?

发布于 2024-11-03 16:28:58 字数 298 浏览 1 评论 0 原文

为什么 Java 中的 Map 接口没有 removeAll(Collection c) 方法来删​​除键,就像它有 map.remove(Object )

我知道我总是可以做 map.keySet().removeAll(..) .. 但这是 Map 没有 removeAll() 的原因吗 并鼓励我们使用 map.keySet().removeAll(..)

Why doesn't the Map interface in Java have a removeAll(Collection<?> c) method to remove keys, like it has map.remove(Object)?

I know I can always do map.keySet().removeAll(..) .. but is this a reason that Map doesn't have removeAll() and encourages us to go with map.keySet().removeAll(..) ?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

鹤舞 2024-11-10 16:28:58

集合 API 背后的理念是尽可能小且简单。 Map 上的 Collection 视图已经允许您执行此操作,因此不需要额外的方法。

keySet 方法返回地图的视图。对按键集的操作会反映在地图上。

关于接口设计的更普遍的问题:为什么接口 X 没有方便的方法 Y? 通过 Martin Fowler 对 MinimalInterfaceHumaneInterface

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.

瞳孔里扚悲伤 2024-11-10 16:28:58

因为Map不是Collection,不是继承Collection接口。地图实现使用集合接口来提供它们自己的功能。

想想这样的情况:

  • 你有带有removeAll(..)方法的Map。
  • 您调用此方法并且地图会删除...
  • 那么他们应该删除什么?键、值或对 - 条目 - 键:值?

Map 可以提供方法:

  • removeAllKeys()
  • - 参数是键的集合
  • 。如果映射中存在带有 diffrend 键的值,反之亦然,则不会删除该条目

,但在这种情况下,您有三种方法而不是一种。

因此,将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:

  • you have Map with removeAll(..) method.
  • vou call this method and map removes...
  • so what they should remove? Keys, values or pairs - entries - key:value?

Map can provide methods:

  • removeAllKeys() - parameter is collection of keys
  • removeAllValues() - parameter is collection of values
  • removeAllEntries() - parameter is collection of pair and remove entry if only value is mapped by key. If in map exist value with diffrend key or vice-versa then that entry isn't removed

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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文