我是在一次面试中被问到这个问题的。我的直接回答是每次读写。然后,面试官问道:“您确定散列没有缓存在表中的某个地方吗?”
这让我对自己产生了怀疑。最后,我坚持我最初的答案,但出于好奇心,我想我应该回答这里的问题。
还要注意的是,这个面试是针对JavaScript职位的,但问题不一定是针对JavaScript的。
那么,一般来说,键的散列是计算一次还是每次读/写都计算?具体到JavaScript又如何呢?
发布于 2013-08-31 01:56:26
当然,这取决于实现方式,即使您询问JS,也有几种实现方式(V8、SpiderMonkey、MSFT等)。
它还应该取决于应用程序。如果您的应用程序更频繁地使用放入哈希表的最后一项,那么以某种方式缓存哈希应该是有意义的。在某些情况下,这会更好。
我猜面试官只是想看看你是如何处理事后批评的。
发布于 2013-08-31 02:56:01
这取决于哈希表和键类型,以及我们讨论的是用于读/写的键还是表中已有的键。前者的散列值可以并且有时被缓存在对象中(例如:Python中的字符串)。后者的散列值可以,有时也会缓存在表中-而不是键,值对,您存储散列,键,值三元组。
在这两种情况下,决定取决于密钥的类型:它们是否很大且散列成本很高?是否值得额外的空间和内存流量?例如,对于超过几十个字符的字符串,这可能是一个明显的胜利,而对于2D点来说,它可能是无用的或有害的。还要注意,散列值可以用来避免比较,这可能很有用,但似乎不那么重要。
https://stackoverflow.com/questions/18538713
复制相似问题