HashMap中的哈希冲突或散列冲突并不是一个新话题,我曾经看过几篇博客和讨论版块,介绍如何产生哈希冲突或如何避免它,但这些都解释得含糊而冗长。最近在一次面试中我也遇到了类似的问题,我有很多事情要解释,但我认为精确地给出正确的解释真的很困难。如果我的问题在这里重复了,请指引我找到精确的答案:
- 哈希冲突到底是什么 - 是一个特性,还是一种常见的错误操作,需要避免?
- 是什么导致了哈希冲突 - 自定义类'hashCode()'方法的错误定义,还是只是不完全覆盖‘equals()’方法,而不覆盖‘hashCode()’方法,或者是开发人员无法控制,许多流行的Java库也有可能导致哈希冲突?
- 当哈希冲突发生时,是否会出现任何错误或意外情况?换句话说,我们是否应该避免哈希冲突?
- Java是否生成或至少尝试生成每个类的唯一hashCode,并在对象初始化期间执行此操作?如果没有,仅依赖Java以确保我的程序不会遇到JRE类的哈希冲突是否正确?如果不正确,则如何避免使用字符串等最终类作为键的哈希图中的哈希冲突?
如果您能回答一个或所有这些问题,我将不胜感激。
HashMap
使用的解决方法是维护一个碰撞值的树(之前是值的列表)。如果你发现有太多的碰撞,你可能需要考虑调整哈希表中的桶数。你的问题太笼统了,我同意其他评论的观点,你应该缩小你在这里想要问的问题。 - Tim Biegeleisen