ot;);
System.out.println("st1:"+st1.hashCode());
System.out.println("st2:"+st2.hashCode());
String str1 = new String("小明 初1-6班");
String str2 = new String("小明 初1-6班");
System.out.println("str1:"+str1.hashCode());
System.out.println("str2:"+str1.hashCode());
}
}
运行打印:
如上图可以看到,对于相同内容的st1和st2而言,它们的hash值完全不同,如果我们将它们使用到Hashtable之类的哈希表上的话,将会出现 st1和st2内容相同,却存储在表里的位置却不同,
并且比较st1和st2相等时,也会出现false.
因为判断哈希表里两个对象相等时,也会先判断hash值是否相等,再判断是否equals().
目的:hash值能够加快判断速度,但是hash值也有可能值相同从而出现冲突,所以如果两个对象相等时,会再次判断一次equals().
6.3 接下来重写修改上面类覆写hashCode()
class Student
{
String name;
String clas;
Student(String name,String clas)
{
this.name = name;
this.clas = clas;
}
public int hashCode() //覆写hashCode()
{
return name.hashCode()*2+clas.hashCode();
}
}
运行打印:
下章学习:12.JAVA-基本数据类型的包装类操作
|