Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/369.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 哈希冲突到底是什么_Java_Collections_Collision_Hash Collision - Fatal编程技术网

Java 哈希冲突到底是什么

Java 哈希冲突到底是什么,java,collections,collision,hash-collision,Java,Collections,Collision,Hash Collision,HashMap中的散列冲突或散列冲突并不是一个新话题,我遇到过几个博客和讨论板,它们解释了如何产生散列冲突,或者如何以一种模糊和详细的方式避免它。我最近在一次采访中遇到了这个问题。我有很多事情要解释,但我认为很难准确地给出正确的解释。很抱歉,如果我的问题在这里重复,请将我转到准确的答案: 散列冲突到底是什么?它是一种功能,还是一种常见的现象,被错误地做了,但很好地避免了 到底是什么导致了哈希冲突-自定义类“hashCode()方法的错误定义,或者在未完全重写hashCode()方法的同时将equ

HashMap中的散列冲突或散列冲突并不是一个新话题,我遇到过几个博客和讨论板,它们解释了如何产生散列冲突,或者如何以一种模糊和详细的方式避免它。我最近在一次采访中遇到了这个问题。我有很多事情要解释,但我认为很难准确地给出正确的解释。很抱歉,如果我的问题在这里重复,请将我转到准确的答案:

  • 散列冲突到底是什么?它是一种功能,还是一种常见的现象,被错误地做了,但很好地避免了
  • 到底是什么导致了哈希冲突-自定义类“
    hashCode()
    方法的错误定义,或者在未完全重写
    hashCode()
    方法的同时将
    equals()
    方法保持为未重写状态,或者这不是由开发人员决定的,而且许多流行的java库也有可能导致哈希冲突的类
  • 当哈希冲突发生时,是否出现任何错误或意外情况?我的意思是,有什么理由我们应该避免散列冲突吗
  • Java是否在对象初始化期间为每个类生成或至少尝试生成唯一的哈希代码?如果不是,那么仅仅依靠Java来确保我的程序不会在JRE类中遇到哈希冲突是正确的吗?如果不正确,那么如何避免哈希映射与最终类(如字符串)的哈希冲突
  • 如果你能分享你对其中一个或所有问题的答案,我将不胜感激

    散列冲突到底是什么?它是一种功能,还是一种常见的现象,被错误地做了,但很好地避免了

    • 哈希冲突就是,该字段哈希代码在对象上的冲突
    到底是什么导致哈希冲突-自定义类的hashCode()方法的错误定义,还是保留equals()方法 未完全重写hashCode()方法时取消重写 是单独的,还是不取决于开发人员和许多流行的java 库也有可能导致哈希冲突的类

    • 不,碰撞可能发生,因为它们是由数学概率决定的,在这种情况下,生日悖论是最好的解释方式
    当哈希冲突发生时,是否出现任何错误或意外情况?我的意思是,有什么理由我们应该避免散列冲突吗

    • 不,java中的String类是开发得非常好的类,您不需要搜索太多就可以找到冲突(请检查字符串“Aa”和“BB”->的hascode,它们都与2112有冲突)
    总结如下: hashcode冲突是无害的,因为您知道这是为什么,与用于证明相等的id不同

    散列冲突到底是什么?它是一种功能,还是一种常见的现象,被错误地做了,但很好地避免了

    这是一个特色。它产生于哈希代码的本质:从大值空间到小得多的值空间的映射。根据设计和意图,将会有冲突

    到底是什么导致了哈希冲突-自定义类“hashCode()方法”的错误定义

    一个糟糕的设计会让事情变得更糟,但这在概念上是很普遍的

    或者在不完全重写hashCode()方法的同时不重写equals()方法

    没有

    或者这不是由开发人员决定的,而且许多流行的java库也有可能导致哈希冲突的类

    这真的没有道理。散列肯定迟早会发生冲突,而糟糕的算法会使冲突更快发生。就这样

    当哈希冲突发生时,是否出现任何错误或意外情况

    如果哈希表写得很好,则不会。哈希冲突只意味着哈希代码不是唯一的,这会导致调用
    equals()
    ,重复越多,性能越差

    我的意思是,有什么理由我们应该避免散列冲突吗

    你必须权衡计算的简便性和价值的分散性。没有单一的黑白答案

    在对象初始化期间,Java是否生成或至少尝试为每个类生成唯一的hasCode

    不,“唯一散列码”在术语上是矛盾的

    如果不是,那么仅仅依靠Java来确保我的程序不会在JRE类中遇到哈希冲突是正确的吗?如果不正确,那么如何避免哈希映射与最终类(如字符串)的哈希冲突

    这个问题毫无意义。如果您使用的是
    String
    ,那么您对哈希算法没有任何选择,而且您使用的类的哈希代码已经被专家们苦练了二十年或更长时间

    哈希冲突到底是什么?它是一种特性,还是一种常见现象 哪一种做法是错误的,但值得避免

    都不是。。。二者都这是一种常见的现象,但不是错误的做法,这是值得避免的

    到底是什么导致哈希冲突-自定义的错误定义 类的hashCode()方法,或保留equals()方法 未完全重写hashCode()方法时取消重写 是单独的,还是不取决于开发人员和许多流行的java 库也有可能导致哈希冲突的类

    通过糟糕地设计hashCode()方法,可能会产生太多的冲突,使equals方法不被重写不应直接影响冲突的数量,许多流行的java库都有可能导致冲突的类(实际上几乎所有的类)

    当哈希冲突发生时,是否出现任何错误或意外情况?我 我们有什么理由避免散列冲突吗

    性能下降,这是避免它们的原因,但是程序应该继续工作

    Java是否生成或至少尝试生成每个文件的唯一哈希代码 对象初始化期间的类?如果否,依赖Java是否正确 只有这样才能确保