集合和地图

时间:2010-01-21 21:18:04

标签: java map

我们可以制作一个实现地图的集合吗?谢谢。

4 个答案:

答案 0 :(得分:4)

根据定义,地图是“集合”。但是,如果您实现Map interface,则不会有Collection的子类,因为Map接口不会扩展Collection interface。原因是地图对键值对起作用,而集合只是组合在一起的单个对象。

MapCollection接口之间也存在一些冲突。例如,您必须拥有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)