java.lnag.Object中对hashCode的约定:
- 在一个应用程序执行期间,如果一个对象的equals方法做比较所用到的信息没有被修改的话,则对该对象调用hashCode方法多次,它必须始终如一地返回同一个整数。
- 如果两个对象根据equals(Object o)方法是相等的,则调用这两个对象中任一对象的hashCode方法必须产生相同的整数结果。
- 如果两个对象根据equals(Object o)方法是不相等的,则调用这两个对象中任一个对象的hashCode方法,不要求产生不同的整数结果。但如果能不同,则可能提高散列表的性能。
- 补充:
hash code是一种编码方式,在Java中,每个对象都会有一个hashcode,Java可以通过这个hashcode来识别一个对象。至于hashcode的具体编码方式,比较复杂(事实上这个编码是可以由程序员通过继承和接口的实现重写的),可以参考数据结构书籍。而hashtable等结构,就是通过这个哈希实现快速查找键对象。这是他们的内部联系,但一般编程时无需了解这些,只要知道hashtable实现了一种无顺序的元素排列就可以了。两个对象值相同(x.equals(y) == true),则一定有相同的hash code。
-
- 详情见例子:
- public void test05(){
String a=new String("1");
String b=new String("1");
System.out.println(a==b);
System.out.println(a.equals(b));
System.out.println(a.hashCode()+" "+b.hashCode());
System.out.println(a.hashCode()==b.hashCode());
}
public static void main(String args[]) {
new test().test05();
//System.gc();
//Runtime.getRuntime().gc();
}
- 结果是:
- false
true
49 49//有相同的hash code。
true
本文详细介绍了Java中对象的hashCode方法的约定,包括hashCode的一致性、相等对象的相同hashCode以及hashCode与equals方法的关系。并通过示例展示了如何在实际编程中使用hashCode来优化数据结构性能。
&spm=1001.2101.3001.5002&articleId=8832763&d=1&t=3&u=36f7a47934ee445093addfec3b87b922)
2149

被折叠的 条评论
为什么被折叠?



