Map和Hashmap之间有区别吗?

时间:2014-05-12 17:22:04

标签: java map

我已经看到人们使用Map而不是HashMap来声明HashMap。

e.g。 映射mapName = new HashMap(); 我通常使用 HashMap mapName = new HashMap(); ;

对于HashSet也一样,我见过 Set setName = new HashSet();用过的, 而我通常使用 HashSet setName = new HashSet()

与ArrayList(List)相同,等等。

我的问题是,这样做有什么好处,还是只是一个观点?

3 个答案:

答案 0 :(得分:5)

Map是界面的名称,它保证了许多实现的方法。

HashMap是实现上述接口的类的名称。

但是,HashMap并不是实现Map接口的唯一类。其他类可以在Java doc Map页面上找到。

有用的链接:

Java Interfaces?

What is the difference between the HashMap and Map objects in Java?

http://docs.oracle.com/javase/7/docs/api/java/util/Map.html

答案 1 :(得分:3)

正如@AntonH所提到的,Map是接口,HashMap是该接口的具体实现。

要回答问题的最后部分,这样做的好处是它可以让您的代码更加灵活,免费。这意味着接口的任何实现都可以在构造它的位置“插入”,其余的代码不必更改。

这不仅适用于核心库中的替代实现(例如HashMap vs TreeMap);但也适用于其他自定义实现(例如,有人可能会编写一个ListeningMap,其中有挂钩以在添加条目时得到通知。

如果你写了一个接受HashMap参数的方法,那么人们只能传递它HashMaps。它会强制调用者采用特定的数据存储,或者每次调用时都会有投射的开销。它会阻止他们做任何有趣的逻辑(比如前面提到的听众,或动态计算其条目的Map)。

所以,除非你真的,特别需要将值作为HashMap(几乎不是这种情况),将类型声明为最广泛的接口可以提供很大的灵活性。

答案 2 :(得分:0)

Map是一个接口,即一个定义如何使用某事物的抽象“事物”。

HashMap是该界面的实现。

enter image description here