当我从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)。在第二个示例中,您不能 - 您仅限于 HashMaps(及其任何子类)。一般来说,第一种方法比第二种方法更受欢迎,因为它可以提供更大的灵活性。

最终,第一条语句创建了一个type Map 的变量,它是HashMap 的一个实例。第二个创建一个 type HashMap 的变量,它也是 HashMap 的一个实例。

【讨论】:

以上是关于当我从map和hashmap创建对象时有啥区别[重复]的主要内容,如果未能解决你的问题,请参考以下文章

java中hashset和hashmap有啥特点?

HashMap和HashTable的区别

当我写 Func1(int &a) 和 Func1(int *a) 时有啥区别 [重复]

C++ Map中的数据存储方式是啥?Map和HashMap有啥区别?

java中HashMap和HashTable有啥共同点和区别

在Django中刷新页面时有什么办法可以避免创建新对象吗?