【问题标题】:What's the difference between hash-map and map [duplicate]哈希映射和映射有什么区别[重复]
【发布时间】:2011-06-02 09:28:34
【问题描述】:

可能重复:
Java - HashMap vs Map objects

hash-map 是否有多个值?

【问题讨论】:

标签: data-structures


【解决方案1】:

哈希映射是映射的特定实现,使用hash function。映射总是(最多)每个键有一个值。

【讨论】:

  • 投反对票的人能否解释一下答案的哪一部分是错误的?
【解决方案2】:

在 Java 中,Map 是一个接口,而 HashMap 实现了 Map 接口。也就是说,一个HashMap可以被实例化并赋值给一个Map变量

Map myMap = new HashMap();

一个 HashMap 和一个 Map 可以包含多个键/值对,但它们不能包含重复的键。

【讨论】:

【解决方案3】:

参考 Java 语言,Map 是 java.util 包中的一个接口,用于将键映射到值。地图不能包含重复的键;每个键最多可以映射到一个值。 HashMap 是 Map 接口的基于哈希表的实现。 HashMap 提供所有可选的映射操作,并允许空值和空键。如果您想为单个键使用多个值,则只需使用 Map 或 Google Collections MultiMap。 如果键是字符串,哈希映射将创建字符串的哈希并使用该哈希来索引数组,从而进行持续查找。但是,由于字符串的散列可以产生与另一个字符串的散列相同的索引,因此需要进行一些冲突检测。因此增加了复杂性来管理冲突。

地图:

  • 不能包含重复值。
  • 每个键最多可以映射到一个值。

哈希映射:

  • 哈希创建(可能是字符串大小的线性复杂度,具体取决于创建哈希的算法)。
  • 使用哈希进行持续查找。
  • 如果考虑到冲突,则将线性复杂度与相同哈希的冲突次数相加。

【讨论】:

  • 这个问题没有提到 Java。映射是一种抽象数据类型,可以在任何语言中使用。事实上,他澄清说他实际上是在谈论 C。你的回答也自相矛盾。 Map Java中的一个接口,它没有指定任何实现。因此,说它具有日志复杂性显然是错误的。在 Java 或其他语言中,有多种方法可以实现映射。哈希映射和树映射(确实具有日志复杂性)是其中两种方式。键也不需要是字符串。
  • 当然!在澄清他指的是C语言之前,我碰巧假设了一些事情。此外,您说得对,密钥不一定总是 String,但这只是一个示例,可能措辞不正确。
  • 地图下的要点仍然不正确。地图可以通过多种方式实现,哈希地图就是地图。这些要点可能对TreeMap<String> 有意义。
  • 好的,感谢您提请注意。
猜你喜欢
  • 1970-01-01
  • 2016-01-24
  • 2010-09-18
  • 1970-01-01
  • 1970-01-01
  • 2017-10-24
  • 1970-01-01
  • 1970-01-01
  • 2011-04-22
相关资源
最近更新 更多