hashCode方法
当使用HashSet中的add方法添加重复数据时,返回值为false,欲分析底层源代码,需要进行对HashCode方法进行分析说明。
public class Test1 {
static final int hash(Object key) {
//在源代码中摘出hash方法进行分析操作。
int h;
return (key == null) ? 0 : (h = key.hashCode()) ^ (h >>> 16);
}
public static void main(String[] args) {
Integer a = 11;
Integer b = new Integer(11);
System.out.println(hash(a));
System.out.println(hash(b));
String str1="11111";
String str2=new String("11111");
System.out.println(hash(str1));
System.out.println(hash(str2));
Student stu1 = new Student();
Student stu2 = new Student();
System.out.println(hash(stu1));
System.out.println(hash(stu2));
}
}
结果为:
11
11
46760248
46760248
5433712
2430314
public class Student {
}
从代码中我们可以发现当为重写HashCode方法时,不同的对象调用Hashcode方法返回值是不一样的,下面我们重写Student类中的HashCode方法:
public class Student {
@Override
public int hashCode() {
return 0;
}
}
Test1中代码结果为:
11
11
46760248
46760248
0
0
可推出结论:
同一个对象调用多次该方法,结果相同;不同对象,如果重写了hashCode方法,使得其返回值相同,则多次调用该方法,结果相同;这个结论在后面分析代码时会起到决定性作用。
对象名.add方法添加元素,元素重复
import java.util.HashSet;
public class Test2 {
public static void main(String