首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >hashCode实现

hashCode实现
EN

Stack Overflow用户
提问于 2012-07-07 19:27:30
回答 2查看 990关注 0票数 0
代码语言:javascript
复制
class A{

      @Override
      public int hashCode() {
        return 10;
    }
}

public class SampleClass {

    public static void main(String[] args){
        Map map = new HashMap();

        map.put(new A(), "A");
        map.put(new A(), "B");

        System.out.println(map.size());

        System.out.println(new A().hashCode());
        System.out.println(new A().hashCode());
    }
}

输出:-

代码语言:javascript
复制
2

10

10

为什么是2?如果我们实现的是hashCode方法,它将返回相同的整数。是不是应该是1?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-07-07 19:28:07

你没有凌驾于equals(Object)之上,所以它们不平等。

仅仅因为两个对象具有相同的哈希代码并不意味着HashMap假设它们是相同的-实际上,如果是这样的话,这将是非常非常糟糕的。

如果希望两个A对象被HashMap视为相等,则必须在A中重写equals(Object)以将一个A定义为等于另一个A

票数 9
EN

Stack Overflow用户

发布于 2012-07-07 19:32:48

来自http://docs.oracle.com/javase/6/docs/api/java/lang/Object.html#hashCode()

hashCode的总合同是:

  • 每当在执行Java应用程序期间在同一个对象上多次调用它时,hashCode方法必须始终如一地返回相同的整数,前提是不修改关于该对象的相等比较中使用的任何信息。从应用程序的一次执行到同一应用程序的另一次执行,这个整数不需要保持一致。
  • 如果两个对象根据equals(Object)方法相等,那么对两个对象中的每个对象调用hashCode方法都必须产生相同的整数结果。
  • 不要求两个对象根据相等(java.lang.Object)方法不相等,那么对两个对象调用hashCode方法必须产生不同的整数结果。然而,程序员应该知道,为不等对象生成不同的整数结果可能会提高哈希表的性能。

因此,当要知道两个物体是否相等时,就像路易斯指出的那样,平等是前进的道路。哈希代码只告诉您如何在基于哈希的集合实现中存储对象。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11378014

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档