我在一次面试中被问到:“请告诉我你所知道的关于哈希表的所有内容。” 我简单地回答说:哈希表是一个数据结构, 它由键值对组成,使用哈希函数来定位元素, 并可以解决哈希冲突等问题。后来他们问我:“好的,现在请以5岁孩子听得懂的方式解释刚才说的所有内容,不要使用任何技术术语,特别是哈希和映射。” 这让我有些意外,我并没有给出好的答案。你会怎样回答呢?
规则。孩子们知道规则。他们知道某些物品应该放在特定的地方。HashMap就像一套规则,它告诉我们,对于一个物品(你的鞋子、最喜欢的书或衣服),有一个具体的地方是它们所属的地方(鞋架、书架或壁橱)。
因此,如果你想知道鞋子放在哪里,你知道要看鞋架上有没有鞋子。
但是等等:如果鞋架已经满了怎么办?有几个选项。
1)对于每个物品,有一系列可以尝试的位置。试着把它们放在门旁边。但是,那里已经有东西了:还能放哪里呢?试试衣柜。如果我们需要找到我们的鞋子,我们按照相同的列表进行搜索,直到找到它们。(探查序列)
2)买一个更大的房子,带一个更大的鞋架。(动态调整大小)
3)把鞋子堆叠在鞋架顶部,忽略这会使找到正确的鞋子很困难,因为我们必须浏览整个鞋堆才能找到它们。(链式存储)
作为一个家长,如果我要向一个5岁的孩子解释哈希映射表,我会拿着一块巧克力纸杯蛋糕说出你所说的话。
说真的,像这样的问题应该意味着“你能用简单易懂的英语解释这个概念吗”,这是衡量你对它的理解程度的好启发式方法。既然你似乎明白了这一点,那么这个问题似乎有点傻。