为什么 Map 不扩展集合接口

2022-09-02 11:25:21

为什么接口不扩展接口?不是键值对的集合吗?java.util.Mapjava.util.Collectionjava.util.Map


答案 1

集合假定元素为一个值。映射假定键/值对的条目。它们可以被设计为重用相同的通用接口,但是它们实现的一些方法是不兼容的,例如

Collection.remove(Object) - removes an element.
Map.remove(Object) - removes by key, not by entry.

您可以将 Map 建模为条目集合,这就是作用所在。Map.entrySet()

有一些共同的方法;、、,但这些作为独立接口不太可能有太大价值。(同样可以代替使用)size()isEmpty()clear()putAll/addAll()Map.entrySet()


答案 2

因为接口很大程度上与接口不兼容。如果扩展,该方法会做什么?CollectionMapMapCollectionadd(Object)

这两个接口具有非常不同的语义。如果需要 as 集合的值或键,则始终可以使用 /。MapkeySet()values()