java哈希表的哈希

java哈希表的哈希,java,hashtable,hashcode,Java,Hashtable,Hashcode,java哈希表元素的哈希代码总是唯一的 如果没有,我如何保证一次搜索将为我提供正确的元素?不一定。两个不同且不相等的对象可以具有相同的哈希代码。不一定。两个不同且不相等的对象可以具有相同的哈希代码。理想情况下,是的。实际上,碰撞确实偶尔发生。理想情况下,是的。实际上,碰撞确实偶尔发生。来自Java: hashCode的总合同为: 当在一个过程中对同一对象多次调用时 在执行Java应用程序时,hashCode方法必须一致 如果在equals比较中未使用任何信息,则返回相同的整数 在对象上修改。这个

java哈希表元素的哈希代码总是唯一的


如果没有,我如何保证一次搜索将为我提供正确的元素?

不一定。两个不同且不相等的对象可以具有相同的哈希代码。

不一定。两个不同且不相等的对象可以具有相同的哈希代码。

理想情况下,是的。实际上,碰撞确实偶尔发生。

理想情况下,是的。实际上,碰撞确实偶尔发生。

来自Java:

hashCode的总合同为:

当在一个过程中对同一对象多次调用时 在执行Java应用程序时,hashCode方法必须一致 如果在equals比较中未使用任何信息,则返回相同的整数 在对象上修改。这个整数不需要保持一致 从应用程序的一次执行到同一应用程序的另一次执行 应用程序

如果根据equalsObject,两个对象相等 方法,然后必须对两个对象中的每个对象调用hashCode方法 生成相同的整数结果

如果两个对象根据 equalsjava.lang.Object方法,然后对每个 这两个对象必须产生不同的整数结果。但是, 程序员应该知道,为 不相等的对象可能会提高哈希表的性能

只要合理可行, 类定义的hashCode方法 对象不返回不同的整数 用于不同的对象。这是 通常通过转换 对象的内部地址 变成一个整数,但是这个 实现技术并非如此 JavaTM编程所要求的 语言

因此,是的,您通常可以期望对象的默认哈希代码是唯一的。但是,如果该方法已被存储在哈希表中的类重写,则所有赌注都无效。

来自Java:

hashCode的总合同为:

当在一个过程中对同一对象多次调用时 在执行Java应用程序时,hashCode方法必须一致 如果在equals比较中未使用任何信息,则返回相同的整数 在对象上修改。这个整数不需要保持一致 从应用程序的一次执行到同一应用程序的另一次执行 应用程序

如果根据equalsObject,两个对象相等 方法,然后必须对两个对象中的每个对象调用hashCode方法 生成相同的整数结果

如果两个对象根据 equalsjava.lang.Object方法,然后对每个 这两个对象必须产生不同的整数结果。但是, 程序员应该知道,为 不相等的对象可能会提高哈希表的性能

只要合理可行, 类定义的hashCode方法 对象不返回不同的整数 用于不同的对象。这是 通常通过转换 对象的内部地址 变成一个整数,但是这个 实现技术并非如此 JavaTM编程所要求的 语言

因此,是的,您通常可以期望对象的默认哈希代码是唯一的。但是,如果该方法已被存储在哈希表中的类重写,则所有赌注都将取消

java哈希表元素的哈希代码总是唯一的

他们应该这样做。至少在同一个班级里

如果不是,我如何保证一次搜索将为我提供正确的元素

通过为类指定良好的hasCode实现:

java哈希表元素的哈希代码总是唯一的

他们应该这样做。至少在同一个班级里

如果不是,我如何保证一次搜索将为我提供正确的元素

通过为您的类指定一个好的hasCode实现:

第一件事。 您应该考虑使用HASMAP代替HASHIT表,因为后者被认为是过时的,它强制执行隐式同步,这不是大多数时候都需要的。如果您需要一个同步HashMap,那么它很容易实现

现在,关于你的问题。 Hashcode不保证在数学上是唯一的, 但是,当您使用HashMap或Hashtable时,这并不重要。 如果两个键生成相同的哈希代码,则会在每个键上自动调用equals,以确保检索到正确的对象。 如果您使用字符串作为密钥,则无需担心, 但是如果您使用自己的对象作为键,那么应该重写equals和hashCode方法。 equals方法对于HashMap的正确操作是必需的,而hashCode方法的编码应该使哈希表相对稀疏,否则HashMap将只是一个长数组 如果您使用的是Eclipse,那么有一种生成哈希代码的简单方法 它基本上为你做了所有的工作。

第一件事。 您应该考虑使用HASMAP代替HASHIT表,因为后者被认为是过时的,它强制执行隐式同步,这不是大多数时候都需要的。如果您需要一个同步HashMap,那么它很容易实现

现在,关于你的问题。 Hashcode不保证在数学上是唯一的, 但是,当您使用HashMap或Hashtable时,这并不重要。 如果两个键生成相同的哈希代码,则会在每个键上自动调用equals,以确保检索到正确的对象。 如果您使用字符串作为密钥,则无需担心, 但是如果您使用自己的对象作为键,那么应该重写equals和hashCode方法。 equals方法对于HashMap的正确操作是必需的,而hashCode方法的编码应该使哈希表相对稀疏,否则HashMap将只是一个长数组
如果您使用的是Eclipse,那么有一种简单的方法可以生成hashCode和equals,它基本上为您完成了所有的工作。

为了回答问题的后半部分,HashTable不使用hashCode来确定相等性。它使用Equals来决定返回什么。它使用哈希代码将事情缩小到少数几个元素来测试是否相等。为了回答问题的后半部分,哈希表不使用哈希代码来确定相等。它使用Equals来决定返回什么。它使用HashCode将内容缩小到少数几个元素来测试Equals。您确定Eclipse可以自动生成HashCode和Equals吗?我对此表示怀疑,但也许你可以再加一些解释来证明我错了。谢谢。右键点击编辑器,从上下文菜单中选择source->generate hashCode and equals。现在我明白了,我从来没有用过它。谢谢您的输入。您确定Eclipse可以自动生成hashCode和equals吗?我对此表示怀疑,但也许你可以再加一些解释来证明我错了。谢谢。右键点击编辑器,从上下文菜单中选择source->generate hashCode and equals。现在我明白了,我从来没有用过它。谢谢你的意见。