Java中的Hashmap与Map
可能重复:Java中的Hashmap与Map,java,map,hashmap,Java,Map,Hashmap,可能重复: 这两者之间的区别是什么: Map <String,Integer>myMap = new HashMap<String,Integer>(); Map myMap=newhashmap(); VS HashMap map=newhashmap(); 在这方面,Ron的区别在于: 当您使用Map作为一种类型时,您可以将实现(HashMap)切换到其他类型 这是一件好事 编辑:阅读此-区别在于: 当您使用Map作为一种类型时,您可以将实现(HashMap)
这两者之间的区别是什么:
Map <String,Integer>myMap = new HashMap<String,Integer>();
Map myMap=newhashmap();
VS
HashMap map=newhashmap();
在这方面,Ron的区别在于:
当您使用Map
作为一种类型时,您可以将实现(HashMap)切换到其他类型
这是一件好事
编辑:阅读此-区别在于:
当您使用Map
作为一种类型时,您可以将实现(HashMap)切换到其他类型
这是一件好事
编辑:阅读此-对象之间没有差异。与对象的接口存在差异。在第一种情况下,接口是
HashMap
,而在第二种情况下,接口是Map
。不过,底层对象是相同的
使用Map
的优点是,您可以将底层对象更改为不同类型的Map,而不会破坏与使用它的任何代码的约定。如果将其声明为HashMap
,则如果要更改基础实现,则必须更改合同
另外,
Map
是Map的静态类型,而HashMap
是Map的动态类型。这意味着编译器将把您的映射对象视为map
类型之一,即使在运行时,它可能指向它的任何子类型
这种针对接口而不是实现编程的做法还有一个额外的好处,那就是保持灵活性:例如,您可以在运行时替换动态类型的映射,只要它是map
的子类型(例如LinkedHashMap
),并动态更改映射的行为
一个好的经验法则是在API级别上尽可能保持抽象:例如,如果您正在编程的方法必须在映射上工作,那么将参数声明为
Map
就足够了,而不是更严格(因为抽象程度较低)的HashMap
类型。这样,API的使用者就可以灵活地确定他们希望传递给方法的Map
实现的类型。对象之间没有区别。与对象的接口存在差异。在第一种情况下,接口是HashMap
,而在第二种情况下,接口是Map
。不过,底层对象是相同的
使用Map
的优点是,您可以将底层对象更改为不同类型的Map,而不会破坏与使用它的任何代码的约定。如果将其声明为HashMap
,则如果要更改基础实现,则必须更改合同
另外,
Map
是Map的静态类型,而HashMap
是Map的动态类型。这意味着编译器将把您的映射对象视为map
类型之一,即使在运行时,它可能指向它的任何子类型
这种针对接口而不是实现编程的做法还有一个额外的好处,那就是保持灵活性:例如,您可以在运行时替换动态类型的映射,只要它是map
的子类型(例如LinkedHashMap
),并动态更改映射的行为
一个好的经验法则是在API级别上尽可能保持抽象:例如,如果您正在编程的方法必须在映射上工作,那么将参数声明为Map
就足够了,而不是更严格(因为抽象程度较低)的HashMap
类型。这样,API的使用者就可以灵活地确定他们希望传递给方法的Map
实现的类型。另外一点
将变量声明为映射会阻止您使用HashMap类提供的clone()方法
因此,如果您使用:
Map <String,Integer>myMap = new HashMap<String,Integer>();
Map myMap=newhashmap();
那么您不能使用:
Map<String,Integer> myMap2 = myMap.clone();
Map myMap2=myMap.clone();
除此之外,它们还可以互换。还有一点
将变量声明为映射会阻止您使用HashMap类提供的clone()方法
因此,如果您使用:
Map <String,Integer>myMap = new HashMap<String,Integer>();
Map myMap=newhashmap();
那么您不能使用:
Map<String,Integer> myMap2 = myMap.clone();
Map myMap2=myMap.clone();
除此之外,它们还可以互换。第一个相关问题。使用搜索第一个相关问题。使用Search非常感谢您的帮助!我不明白为什么人们投票反对这个问题,我认为了解我们使用的数据结构之间的差异非常重要。再次感谢!非常感谢你的帮助!我不明白为什么人们投票反对这个问题,我认为了解我们使用的数据结构之间的差异非常重要。再次感谢!