当我从map和hashmap创建对象时有啥区别[重复]
Posted
技术标签:
【中文标题】当我从map和hashmap创建对象时有啥区别[重复]【英文标题】:whats the different between when i create object from map and hashmap [duplicate]当我从map和hashmap创建对象时有什么区别[重复] 【发布时间】:2012-12-09 17:59:14 【问题描述】:可能重复:Java - HashMap vs Map objects
两者有什么区别
private Map<String, Integer> drawableMap = new HashMap<String, Integer>();
和
private HashMap<String, Integer> drawableMap = new HashMap<String, Integer>();
【问题讨论】:
见Type List vs type ArrayList in Java 查找“编程到接口” 你可以看到这个帖子:***.com/questions/9852831/… 【参考方案1】:赋值表达式左侧的变量类型与对象创建无关;因此,在这两种情况下,您都在创建完全相同的对象。由于在 Java 中您只能将对象的 reference 存储到变量中,因此该变量的类型限制了该变量可以引用的对象类型。在第一种情况下,它可以引用任何实现Map
的对象;在第二种情况下,只接受HashMap
对象。
另一个后果是,在第一种情况下,您只能调用在Map
接口中声明的HashMap
的方法,而在第二种情况下,您可以调用特定于HashMap
实现的任何其他方法。
在大多数实际情况下,您会更喜欢第一种情况,因为您几乎不需要特定于实现的方法。同样的规则也适用于完整的集合框架。
【讨论】:
【参考方案2】:在第一个示例中,您可以稍后将drawableMap
分配给Map
的其他实现(例如LinkedHashMap
)。在第二个示例中,您不能 - 您仅限于 HashMap
s(及其任何子类)。一般来说,第一种方法比第二种方法更受欢迎,因为它可以提供更大的灵活性。
最终,第一条语句创建了一个type Map
的变量,它是HashMap
的一个实例。第二个创建一个 type HashMap
的变量,它也是 HashMap
的一个实例。
【讨论】:
以上是关于当我从map和hashmap创建对象时有啥区别[重复]的主要内容,如果未能解决你的问题,请参考以下文章
当我写 Func1(int &a) 和 Func1(int *a) 时有啥区别 [重复]
C++ Map中的数据存储方式是啥?Map和HashMap有啥区别?