-2

我是 java 新手,遇到了 hashmaps 的以下用法:

public static HashMap< String, Integer > Table1;
....
Table1 = new HashMap< String, Integer > ();

.....
public Map<String, Integer> Table2 = new HashMap<String, Integer>();

我的问题是上述陈述是否等效?我看到Map<String, Integer>用于Table2。HashMap< String, Integer > Table1Map<String, Integer> Table2相同的编程结构吗?它们可以互换使用吗?

4

4 回答 4

3

Map是一个接口,在HashMap等几种实现中都有实现。

HashMap 是一个完整的实现类。

一个有用的答案在这里 - Java 中 HashMap 和 Map 的区别..?

于 2013-03-13T03:38:37.720 回答
2

Map是一个接口,HashMap是它的一个实现。它们只能在一个方向上互换,这意味着您可以在任何可以使用 a 的地方Map使用 aHashMap来代替。但是,它远不止于此,因为它Map表达了任何类型的“映射”必须提供的所有操作,无论是基于散列的映射 ( HashMap)、排序映射 ( TreeMap)、线程安全映射 ( ConcurrentMap) 还是不可变的地图(ImmutableMap来自番石榴)。任何需要 a 的地方都可以使用这些不同类型的地图等等MapMap本身不提供任何实际的工作代码。它只说明了每种地图必须能够做什么。

从“什么是接口?”下的 Java 教程中了解有关这种关系的更多信息。“面向对象的编程概念”部分和“接口和继承”部分。

于 2013-03-13T03:37:48.213 回答
1

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

接口变量可以保存子类引用。不能互换使用。

于 2013-03-13T03:34:21.903 回答
1

按照定义,Table1 必须始终是 HashMap,但 Table2 也可以是其他映射。

public Map<String, Integer> Table2 = new HashMap<String, Integer>();
Table2 = new TreeMap<String, Integer>();
Table2 = someFunctionThatReturnsMaps();

最后一个可能是最重要的,因为有多种库返回 Map 类型,您必须将其强制转换为 Table1 的 HashMap。

额外说明:一般约定是变量名以小写开头(table1、table2 等)

于 2013-03-13T03:38:32.120 回答