0

可能重复:
Java - HashMap vs Map 对象

有什么不同

private Map<String, Integer> drawableMap = new HashMap<String, Integer>();

private HashMap<String, Integer> drawableMap = new HashMap<String, Integer>();
4

2 回答 2

1

赋值表达式左侧的变量类型与对象创建无关;因此,在这两种情况下,您都在创建完全相同的对象。由于在 Java 中您只能将对象的引用存储到变量中,因此该变量的类型限制了该变量可以引用的对象类型。在第一种情况下,它可以引用任何实现的对象Map;第二,只有HashMap对象是可以接受的。

另一个结果是,在第一种情况下,您只能调用HashMap在接口中声明的方法Map,而在第二种情况下,您可以调用特定于HashMap实现的任何其他方法。

在大多数实际情况下,您会更喜欢第一种情况,因为您几乎不需要特定于实现的方法。同样的规则也适用于完整的 Collections Framework。

于 2012-12-22T11:07:48.770 回答
0

在第一个示例中,您可以稍后分配给(例如)drawableMap的其他实现。在第二个示例中,您不能 - 您仅限于s (及其任何子类)。一般来说,第一种方法比第二种方法更受欢迎,因为它将提供更大的灵活性。MapLinkedHashMapHashMap

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

于 2012-12-22T11:05:49.373 回答