哈希映射和映射有啥区别[重复]

Posted

技术标签:

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

可能重复:Java - HashMap vs Map objects

hash-map 是否有多个值?

【问题讨论】:

什么语言?如果是 Java,则为 Java - HashMap vs Map objects 的副本 【参考方案1】:

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

【讨论】:

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

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

Map myMap = new HashMap();

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

【讨论】:

只是为了澄清——一个实例化的 Map 类在它自己的每对中不能有多个键。 “一个映射不能包含重复的键;每个键最多可以映射到一个值。” docs.oracle.com/javase/6/docs/api/java/util/Map.html【参考方案3】:

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

地图:

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

哈希映射:

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

【讨论】:

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

以上是关于哈希映射和映射有啥区别[重复]的主要内容,如果未能解决你的问题,请参考以下文章

在检索值之前检查哈希映射键是不是存在[重复]

Clojure - 更新向量内的哈希映射[重复]

在Java中,啥是集合类,跟普通类有啥区别?

java中 List 与Set 有啥区别?

使用哈希映射的数据表示

内存映射 io 和 io 映射 io 有啥区别