为什么Java中的Map
接口没有removeAll(Collection<?> c)
方法来删除密钥,就像它有map.remove(Object)
一样?
我知道我可以随时map.keySet().removeAll(..)
...但这是Map
没有removeAll()
的原因,并鼓励我们选择map.keySet().removeAll(..)
吗?
答案 0 :(得分:17)
集合API背后的理念是尽可能小巧简单。 Map上的Collection视图允许您已经执行此操作,因此不需要额外的方法。
keySet方法返回Map的视图。键集上的操作反映在地图上。
关于界面设计的更一般的问题:为什么界面X没有方便的方法Y?由Martin Fowler关于MinimalInterface vs HumaneInterface的讨论更深入地讨论
答案 1 :(得分:1)
因为Map不是Collection,所以不扩展Collection接口。映射实现USE集合接口以提供它们自己的功能。
想想这样的情况:
地图可以提供方法:
但在这种情况下,你有三种方法而不是一种。
所以把removeAll方法放到Map接口上并不清楚要理解哪些类型的对象应该检查和删除 - 键,值,两者或对。