hashtable和hashmap有什么区别?(不是特定于Java)

Opt*_*ime 3 hashtable hashmap

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

关于这个问题,我真的感到困惑和震惊(现在仍然感到困惑).IMO,hastable或hashmap只是一个术语问题.实际上只有Java既有术语又有其他语言如C++,它们甚至没有术语哈希表.在访谈中,我刚刚解释了哈希的原理,并说哈希图和哈希表都应该基于这个原则来实现,我不知道这两者之间是否有任何区别.面试官肯定不相信并且正在寻找其他答案,当然我在那一轮之后被拒绝了.

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

mak*_*dev 5

在计算机科学中,由于措辞的原因存在差异.

HashTable是某种使用键哈希查找表中相应值的查找表,如数据结构.这只是一种键值映射.您可能已经意识到有不同的实现.不同的哈希,哈希共谋解决方案和表增长策略以及更多内幕.如果您因任何原因需要创建自己的哈希表,那将是有趣的.

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

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

字典是另一个抽象级别,因为它可能根本不使用哈希 - 例如,使用全文二进制搜索查找或其他比较方式.如果不考虑某些编程语言,这就是你能得到的全部内容.

- 在考虑太多之前.你能肯定地说 - 你的面试官对他/她在谈论什么有线索吗?您是否讨论过技术细节,或者他们只是倾听/询问并有时评论?有时候,面试官只是想出他们最初并不真正理解的问题的最嘲笑答案.就像你自己写的那样,一般来说它只是术语.软件开发人员经常使用这些术语可互换,除非那些真正具有Java差异的人.