在接受采访时我被问到这个问题。我的直接答案是每次读写。然后,采访者问:“你确定哈希没有缓存在表格的某个地方吗?”
这让我第二次猜测自己。最后,我坚持原来的答案,但出于好奇,我想我在这里问题。
另请注意,此次访谈是针对JavaScript的,但问题并不一定是针对JavaScript的。
因此,一般来说,密钥的哈希是计算一次还是每次读/写?具体到JavaScript呢?
答案 0 :(得分:1)
当然这取决于实现,即使你问JS有几个实现(V8,SpiderMonkey,MSFT等)。
它还应该取决于应用程序。如果您的应用程序更频繁地使用放入哈希表中的最后一项,那么以某种方式缓存哈希值应该是有意义的。在某些情况下,这将是更可取的。
我猜面试官只是想看看你是如何处理猜测的......
答案 1 :(得分:1)
这取决于哈希表和密钥类型,以及我们是否在讨论用于读/写的密钥或表中已有的密钥。前者的哈希值有时可以缓存在对象中(例如:Python中的字符串)。后者的哈希值有时可以缓存在表中 - 而不是存储哈希,键,值三元组的键值对。
在这两种情况下,决定取决于密钥的类型:哈希是否庞大且昂贵?是否值得额外的空间和内存流量?例如,对于大于几十个字符的字符串来说,它可能是一个明显的胜利,并且可能对2D点无用或有害。另请注意,散列值可用于避免比较,可能有用,但似乎并不重要。