我所创建的以下地图之间的区别是什么(在另一个问题中,人们似乎可以互换地使用它们,我想知道它们是否/如何不同):

HashMap<String, Object> map = new HashMap<String, Object>();
Map<String, Object> map = new HashMap<String, Object>();

当前回答

Map是HashMap实现的接口。不同之处在于,在第二个实现中,对HashMap的引用将只允许使用Map接口中定义的函数,而第一个实现将允许使用HashMap中的任何公共函数(包括Map接口)。

如果您阅读Sun的界面教程,可能会更有意义

其他回答

正如TJ Crowder和Adamski所指出的,一个引用指向一个接口,另一个引用指向接口的特定实现。根据Joshua Block的说法,你应该总是尝试对接口进行编码,以允许你更好地处理底层实现的变化——也就是说,如果HashMap突然不适合你的解决方案,你需要改变映射实现,你仍然可以使用map接口,并改变实例化类型。

Map是接口,Hashmap是实现接口的类。

在这个实现中,你创建了相同的对象

在第二个示例中,“map”引用的类型是map,它是由HashMap(和其他类型的map)实现的接口。这个接口是一个契约,表示对象将键映射到值,并支持各种操作(例如put, get)。它没有提到Map(在本例中是HashMap)的实现。

第二种方法通常是首选的,因为您通常不希望将特定的映射实现公开给使用map或通过API定义的方法。

HashMap是Map的一个实现,所以它是完全相同的,但有“clone()”方法,因为我在参考指南中看到))

Map是接口,Hashmap是实现Map interface的类