[java] view plaincopy
import java.util.HashSet;
import java.util.Set;
public class testHashSet {
public static void main(String[] args) {
Student stu1 = new Student("AA", 12);
Student stu2 = new Student("AA", 12);
Set set = new HashSet();
System.out.println(stu1.equals(stu2));//true ,表明stu1和stu2为相同的元素
set.add(stu1);
set.add(stu2);
System.out.println(set.size());//2,表明成功添加了"相同"的元素
}
}
class Student {
private String name;
private int age;
public Student() {
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public Student(String name, int age) {
super();
this.name = name;
this.age = age;
}
// 重写hashcode方法,让其每执行一次返回的值都加1
private static int initHashCode = 1;
@Override
public int hashCode() {
return initHashCode++;
}
// 重写equals,让其只要判定对象内容相等就返回true.
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (!(obj instanceof Student))
return false;
Student other = (Student) obj;
if (age != other.age)
return false;
if (name == null) {
if (other.name != null)
return false;
} else if (!name.equals(other.name))
return false;
return true;
}
这是我博客上的,我直接截取了一段过来,你可以看看,希望能帮到你 作者: 姜浩 时间: 2014-10-31 03:09
这是帮助文档String类中hashCode方法实现的原理。可以解答为什么你代码中的两个hash值相同。
hashCode
public int hashCode()返回此字符串的哈希码。String 对象的哈希码根据以下公式计算:
s[0]*31^(n-1) + s[1]*31^(n-2) + ... + s[n-1]
使用 int 算法,这里 s[i] 是字符串的第 i 个字符,n 是字符串的长度,^ 表示求幂。
(空字符串的哈希值为 0。)