java Hashtable元素的hashCode是否总是唯一的?
如果不是,我怎么保证一次搜索就能给出正确的元素呢?
发布于 2010-01-12 10:48:15
不一定。两个不同的(且不相等的)对象可以有相同的哈希码。
发布于 2010-01-12 10:51:40
从Java documentation
hashCode的总合同是:
在合理的实际情况下,Object类定义的hashCode方法确实会为不同的对象返回不同的整数。(这通常是通过将对象的内部地址转换为整数来实现的,但JavaTM编程语言不需要这种实现技术。)
因此,是的,您通常可以期望对象的默认hashCode是唯一的。但是,如果该方法已被存储在Hashtable中的类覆盖,则所有赌注都将失效。
发布于 2010-01-12 11:13:13
首先要做的是。
您应该考虑使用HashMap而不是Hashtable,因为后者被认为是过时的(它强制执行隐式同步,这在大多数情况下并不是必需的。如果您需要一个同步的HashMap,这很容易做到)
现在,关于你的问题。
不保证哈希码在数学上是唯一的,
但是,当您使用HashMap (或Hashtable)时,这并不重要。
如果两个键生成相同的散列代码,则会在每个键上自动调用equals,以保证检索到正确的对象。
如果你使用字符串作为你的密钥,你就不用担心了,
但是,如果您使用自己的对象作为键,则应该覆盖equals和hashCode方法。
对于HashMap的正确操作,equals方法是必需的,而hashCode方法的编码应该使得哈希表相对稀疏(否则您的哈希图将只是一个很长的数组)
如果你正在使用Eclipse,有一种简单的方法来生成hashCode和equals,它基本上为你做了所有的工作。
https://stackoverflow.com/questions/2046375
复制相似问题