Java中的Hashmap VS Map

JAN*_*JAN 1 java hashmap map

可能的重复:
Java - HashMap 与 Map 对象

有什么区别:

Map <String,Integer>myMap = new HashMap<String,Integer>();
Run Code Online (Sandbox Code Playgroud)

VS

HashMap <String,Integer> map = new HashMap<String,Integer>();  
Run Code Online (Sandbox Code Playgroud)

问候,罗恩

Ram*_*ngh 6

对象之间没有区别。对象的接口有所不同。在第一种情况下,接口是HashMap<String, Object>,而在第二种情况下是Map<String, Object>。但是,底层对象是相同的。

使用的好处Map<String, Object>是您可以将底层对象更改为不同类型的地图,而不会破坏与使用它的任何代码的合同。如果您将其声明为HashMap<String, Object>,如果您想更改底层实现,则必须更改您的合同...


也是Map静态类型的地图,而HashMap动态类型的地图。这意味着编译器会将您的 map 对象视为 type 之一Map,即使在运行时,它可能指向它的任何子类型...

这种针对接口而不是实现进行编程的做法具有保持灵活性的额外好处:例如,您可以在运行时替换动态类型的映射,只要它是Map(例如LinkedHashMap)的子类型,并动态更改映射的行为.

一个好的经验法则是在 API 级别保持尽可能抽象:例如,如果您正在编程的方法必须在映射上工作,那么声明一个参数Map而不是更严格(因为不那么抽象)的HashMap类型就足够了。这样,您的 API 的使用者可以灵活地决定Map他们想要传递给您的方法的实现类型。