class Persont
{
private String name;
private int age;
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;
}
Persont(String name,int age)
{
this.name=name;
this.age=age;
}
public int hashCode() //重写了hashCode,将所有对象的哈希值设为一致。地址值一致才会运行equals进行重复判断;
{
System.out.println(this.getName()+"地址值");
return this.name.hashCode()+age*39;
//因为每个字符串都有哈希值,相同字符串哈希值相同。
/*
乘39是因为保证哈希值唯一性,比如如果李四name哈希值为4
0,age是20,王五哈希值为20,age是40,地址值相同,系统会调用equals判断,
这样运行的就会慢,所以尽量让他少判断
*/
}
public boolean equals(Object obj)
{
if(!(obj instanceof Persont)){
return false;
}
Persont p=(Persont)obj;
System.out.println("因地址值相同"+this.name+"比较了(equals运行)"+p.name+"的内容是否相同,相同存,不同不存");
return this.name.equals(p.name)&&this.age==p.age;
}
}
public class HashSetpaixu
{
public static void main(String[] args)
{
HashSet a=new HashSet();
a.add(new Persont("王五",20));
a.add(new Persont("李四",22));
a.add(new Persont("李四",22));
a.add(new Persont("王五",20));
for(Iterator b=a.iterator();b.hasNext();)
{
Persont c=(Persont)b.next();
System.out.println(c.getName()+c.getAge());
}
}
}