我已经看到人们使用Map而不是HashMap来声明HashMap。
e.g。 映射mapName = new HashMap(); 我通常使用 HashMap mapName = new HashMap(); ;
对于HashSet也一样,我见过 Set setName = new HashSet();用过的, 而我通常使用 HashSet setName = new HashSet()
与ArrayList(List)相同,等等。
我的问题是,这样做有什么好处,还是只是一个观点?
答案 0 :(得分:5)
Map
是界面的名称,它保证了许多实现的方法。
HashMap
是实现上述接口的类的名称。
但是,HashMap
并不是实现Map
接口的唯一类。其他类可以在Java doc Map页面上找到。
有用的链接:
What is the difference between the HashMap and Map objects in Java?
答案 1 :(得分:3)
正如@AntonH所提到的,Map
是接口,HashMap
是该接口的具体实现。
要回答问题的最后部分,这样做的好处是它可以让您的代码更加灵活,免费。这意味着接口的任何实现都可以在构造它的位置“插入”,其余的代码不必更改。
这不仅适用于核心库中的替代实现(例如HashMap
vs TreeMap
);但也适用于其他自定义实现(例如,有人可能会编写一个ListeningMap
,其中有挂钩以在添加条目时得到通知。
如果你写了一个接受HashMap
参数的方法,那么人们只能传递它HashMaps。它会强制调用者采用特定的数据存储,或者每次调用时都会有投射的开销。它会阻止他们做任何有趣的逻辑(比如前面提到的听众,或动态计算其条目的Map
)。
所以,除非你真的,特别需要将值作为HashMap(几乎不是这种情况),将类型声明为最广泛的接口可以提供很大的灵活性。
答案 2 :(得分:0)