java中hashCode和equals什么关系,hashCode到底怎么用的

Object类的hashCode的用法:
马克-to-win:hashCode方法主要是Sun编写的一些数据结构比如Hashtable的hash算法中用到。因为hash很快,所以你往Hashtable里放东西的时候,他先比一下,里面有没有现有的东西的hashCode和你一样,如果都不一样,证明是新的,就不再运行equals方法了,直接放进Hashtable里了,很快。如果放的时候,Hashtable里面现有的某东西的hashCode和他一样,他再运行一下equals,如不一样,则证明是新的,可以放入。equals也一样,证明确实是一样的,不让放入Hashtable。另外,Object的hashCode方法(Sun公司编的)是返回对象的内部地址。(以下摘自sun的文档:Asmuch as is reasonably practical, the hashCode method defined byclass Object does return distinct integers for distinct objects.(This is typically implemented by converting the internal addressof the object into an integer, but this implementation technique isnot required by the JavaTM programming language.)
例2.1.2.1(hashCode都不一样)
import java.util.*;
class CompanyMark_to_win {
private String name;
CompanyMark_to_win(String name) {
this.name = name;
}
public boolean equals(Object o) {
System.out.println("equals被调用");

if (!(o instanceof CompanyMark_to_win)) return false;
CompanyMark_to_win c = (CompanyMark_to_win) o;//downcast,向下转型
return name.equals(c.name);//这个equals是String的方法
}
public int hashCode() {
System.out.println("hashCode 被调用 "+super.hashCode());
return super.hashCode();
}
}
public class Test {
public static void main(String[] args) {
CompanyMark_to_win c1 = new CompanyMark_to_win("Abc");
。。。。。。。。。。。。。。。。。
详情请进:http://www.mark-to-win.com/JavaBeginner/JavaBeginner3_web.html#hashCode

阅读更多

没有更多推荐了,返回首页