日期:2014-05-20  浏览次数:20859 次

关于hashCode()问题请教


public   int   hashCode()
      返回该对象的哈希码值。支持该方法是为哈希表提供一些优点,例如,java.util.Hashtable   提供的哈希表。
      hashCode   的常规协定是:c
              *   在   Java   应用程序执行期间,在同一对象上多次调用   hashCode   方法时,必须一致地返回相同的整数,前提是对象上   equals   比较中所用的信息没有被修改。从某一应用程序的一次执行到同一应用程序的另一次执行,该整数无需保持一致。
              *   如果根据   equals(Object)   方法,两个对象是相等的,那么在两个对象中的每个对象上调用   hashCode   方法都必须生成相同的整数结果。
              *   以下情况不   是必需的:如果根据   equals(java.lang.Object)   方法,两个对象不相等,那么在两个对象中的任一对象上调用   hashCode   方法必定会生成不同的整数结果。但是,程序员应该知道,为不相等的对象生成不同整数结果可以提高哈希表的性能。  
  实际上,由   Object   类定义的   hashCode   方法确实会针对不同的对象返回不同的整数。(这一般是通过将该对象的内部地址转换成一个整数来实现的,但是   JavaTM   编程语言不需要这种实现技巧。)
返回
      此对象的一个哈希码值。


1,什么是哈希表?
2,为什么返回相同的整数,是怎么运算的?
3,不同的两个对象会返回相同的整数吗?在什么情况下?


------解决方案--------------------
2,是怎么运算的?
//通常是返回内存地址,但是不是说java规定了一定要用这种实现方式
javadoc原文为:
As much as is reasonably practical, the hashCode method defined by class java.lang.Object does return distinct integers for distinct objects. (This is typically implemented by converting the internal address of the object into an integer, but this implementation technique is not required by the JavaTM programming language.)
3,不同的两个对象会返回相同的整数吗?
//会
4.什么情况
看你的实现方式
------解决方案--------------------
哈希码一般是用在散列表的数据结构上

散列表的基本思想就是 把各个对象按照一定的算法排列在一个2维数组中

这个算法相对JAVA就是hashCode() 这的算法返回的值对于不同对象应该分布平均,合理冲突

这个方法不应该返回内存地址

关于散列表这里给你解释不清楚,建议你去搜索下相关资料