我们可以制作一个实现地图的集合吗?谢谢。
答案 0 :(得分:4)
根据定义,地图是“集合”。但是,如果您实现Map
interface,则不会有Collection
的子类,因为Map
接口不会扩展Collection
interface。原因是地图对键值对起作用,而集合只是组合在一起的单个对象。
Map
和Collection
接口之间也存在一些冲突。例如,您必须拥有toArray
的实现,对我而言,在地图上没有意义。此外,remove
方法具有不同的签名。
答案 1 :(得分:2)
有两种方法可以理解这个问题。
在技术层面,一个类可以同时实现两个接口吗?不,因为remove方法在两个接口之间是不兼容的(一个返回Object,另一个返回布尔值)。
在概念层面,Map的Map.EntrySet是Map的Collection表示形式,因此您可以在需要Collection时使用它。
如果您只想要Map中的值集合,只需使用Map.values()方法。
答案 2 :(得分:1)
是的,您可以使用单个类实现两个不同的接口。 修改:除了remove方法中的不兼容性。 (感谢托马斯)
但是,在这种情况下,您可以使用Map的一些实现,并使用Map.entrySet(),Map.keySet()和Map.values()分别返回条目,键和值集合的事实。
这取决于您可以访问的内容以及您感兴趣的集合。
如果您需要有序访问密钥集,可能应该使用TreeMap,它保留和排序密钥树。
答案 3 :(得分:1)
由于与具有相同签名的Collection和Map界面上的remove方法中的返回类型不兼容,因此不可能。
返回类型为boolean
java.util.Collection
public boolean remove(Object o)
返回类型为java.lang.Object
java.util.Map
public Object remove(Object key)