我知道哈希表的设计是为了在存储大量数据时轻松排序和检索数据。但是,在检索特定数据时,如果由于碰撞将它们存储在备用位置,它们如何检索?
假设有10个索引,数据A存储在索引3中,数据E遇到冲突,因为数据A已存储在索引3中,而防止冲突则将其放入索引7中。当需要检索数据E时,如何检索E而不是使用第一个哈希函数并检索A?
对不起,如果这是一个愚蠢的问题。我对编程还有点新意。
答案 0 :(得分:1)
我不相信Java会通过将项目移动到其他存储桶来解决哈希冲突。这样做会使得很难确定应该对其进行散列的正确铲斗。如果您仔细阅读this SO article,您会注意到它指出了Java可以使用的两个工具。首先,它维护每个桶*的值列表(请参阅下面的注释)。其次,如果列表变得太大,可能会增加桶的数量。
我相信该列表现在已被树替换。在最坏的情况下,这将确保O(n*lgn)
查找,插入等性能,而对于列表,最差情况下的性能为O(n)
。