Java 哈希冲突到底是什么
HashMap中的散列冲突或散列冲突并不是一个新话题,我遇到过几个博客和讨论板,它们解释了如何产生散列冲突,或者如何以一种模糊和详细的方式避免它。我最近在一次采访中遇到了这个问题。我有很多事情要解释,但我认为很难准确地给出正确的解释。很抱歉,如果我的问题在这里重复,请将我转到准确的答案:Java 哈希冲突到底是什么,java,collections,collision,hash-collision,Java,Collections,Collision,Hash Collision,HashMap中的散列冲突或散列冲突并不是一个新话题,我遇到过几个博客和讨论板,它们解释了如何产生散列冲突,或者如何以一种模糊和详细的方式避免它。我最近在一次采访中遇到了这个问题。我有很多事情要解释,但我认为很难准确地给出正确的解释。很抱歉,如果我的问题在这里重复,请将我转到准确的答案: 散列冲突到底是什么?它是一种功能,还是一种常见的现象,被错误地做了,但很好地避免了 到底是什么导致了哈希冲突-自定义类“hashCode()方法的错误定义,或者在未完全重写hashCode()方法的同时将equ
hashCode()
方法的错误定义,或者在未完全重写hashCode()
方法的同时将equals()
方法保持为未重写状态,或者这不是由开发人员决定的,而且许多流行的java库也有可能导致哈希冲突的类- 哈希冲突就是,该字段哈希代码在对象上的冲突
- 不,碰撞可能发生,因为它们是由数学概率决定的,在这种情况下,生日悖论是最好的解释方式
- 不,java中的String类是开发得非常好的类,您不需要搜索太多就可以找到冲突(请检查字符串“Aa”和“BB”->的hascode,它们都与2112有冲突)
equals()
,重复越多,性能越差
我的意思是,有什么理由我们应该避免散列冲突吗
你必须权衡计算的简便性和价值的分散性。没有单一的黑白答案
在对象初始化期间,Java是否生成或至少尝试为每个类生成唯一的hasCode
不,“唯一散列码”在术语上是矛盾的
如果不是,那么仅仅依靠Java来确保我的程序不会在JRE类中遇到哈希冲突是正确的吗?如果不正确,那么如何避免哈希映射与最终类(如字符串)的哈希冲突
这个问题毫无意义。如果您使用的是String
,那么您对哈希算法没有任何选择,而且您使用的类的哈希代码已经被专家们苦练了二十年或更长时间
哈希冲突到底是什么?它是一种特性,还是一种常见现象
哪一种做法是错误的,但值得避免
都不是。。。二者都这是一种常见的现象,但不是错误的做法,这是值得避免的
到底是什么导致哈希冲突-自定义的错误定义
类的hashCode()方法,或保留equals()方法
未完全重写hashCode()方法时取消重写
是单独的,还是不取决于开发人员和许多流行的java
库也有可能导致哈希冲突的类
通过糟糕地设计hashCode()方法,可能会产生太多的冲突,使equals方法不被重写不应直接影响冲突的数量,许多流行的java库都有可能导致冲突的类(实际上几乎所有的类)
当哈希冲突发生时,是否出现任何错误或意外情况?我
我们有什么理由避免散列冲突吗
性能下降,这是避免它们的原因,但是程序应该继续工作
Java是否生成或至少尝试生成每个文件的唯一哈希代码
对象初始化期间的类?如果否,依赖Java是否正确
只有这样才能确保