hashmap - 哈希表和 HashMap 有什么区别? (不特定于 Java)

标签 hashmap hashtable

在我最近的软件工程师职位面试中,有人问我这个问题:哈希表和 HashMap 之间有什么区别?我问面试官他是否具体了解 Java,因为在 Java 中 hashtable 是同步的而 hashmap 不是(实际上在谷歌搜索后有大量信息可以比较 Java 中的 hashtable 和 hashmap,所以这不是我要找的答案)但他说没有而且想让我解释一下这两者的一般区别。

对于这个问题,我当时真的很疑惑和震惊(其实现在还在疑惑)。 IMO、hastable 或 hashmap 只是一个术语问题。实际上只有 Java 有这两个术语,而在 C++ 等其他语言中,它们甚至没有哈希表这个术语。面试的时候只是解释了hashing的原理,说hashmap和hashtable都是按照这个原理来实现的,不知道这两者有没有区别。面试官肯定不服气,正在寻找其他答案,当然在那轮之后我被拒绝了。

那么回到主题,hashmap 和 hashtable 之间的一般差异(不是特定于 Java)可能有什么区别?

最佳答案

在计算机科学中,由于措辞不同而存在差异。

HashTable 是一种查找表,它使用键散列在类似数据结构的表中查找相应的值。那只是一种键值映射。您可能知道有不同的实现。不同的散列、散列合谋解决方案和表增长策略等等。仅当您出于某种原因需要制作自己的哈希表时才有趣。

HashMap 是键值对与散列键的某种映射。映射本身是抽象的,它可能不是表格。平衡树或尝试或其他数据结构/映射也是可能的。

您可以简化并说 HashTable 是底层数据结构,而 HashMap 可能正在使用 HashTable。

字典是另一个抽象级别,因为它可能根本不使用散列 - 例如使用全文二进制搜索查找或其他比较方式。这就是您在不考虑某些编程语言的情况下可以从单词中得到的全部内容。

-- 在考虑太多之前。你能肯定地说——你的面试官知道他/她在说什么吗?您是否讨论了技术细节,或者他们只是听/问并有时发表评论?有时面试官只是针对他们一开始并不真正理解的问题提出最可笑的答案。 就像您自己写的一样,一般来说它只是术语。软件开发人员经常使用可互换的术语,除了那些真正有差异的术语,例如 Java。

关于hashmap - 哈希表和 HashMap 有什么区别? (不特定于 Java),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36313817/

相关文章:

基于 UML 类图的 Java Bank; HashMap 存储的问题

c - 具有链接方法程序的哈希表未按预期工作

java - 在 Java 8 中向 Map 添加非值的优雅方法?

java - 为什么库没有正确处理 HashMap 初始容量?

c# - 为什么对于 C# 中 byte[] 类型的键,哈希表不会为 "ContainsKey"返回 true?

hashtable - 哈希表vs哈希列表vs哈希树?

java - 在 Java 中使用 HashMap 创建表

java - 在 Collections.synchronizedmap 上同步

java - 每次插入值时如何不计算哈希码

java - 将 map 中的列表展平为单个列表