HashSet去重的基本的原理:
答:调用被添加元素的hashCode( ),和HashSet中已有元素的hashCode( )比较是否相同;如果不相同,直接存储;如果相同,调用equals方法比较是否相同;不相同,则直接存储;相同,则认为是同一元素,不存储。
HashSet默认的去重的方法=====> 重复基本数据类型 引用类型自动过滤
当我们需要对对象类型去重时,需要在JavaBean继承Comparable接口,然后重写hashCode( )和equals方法。
``package code3;
public class User implements Comparable
{
public User(String name, int usernum)
{
super();
this.name = name;
this.usernum = usernum;
}
private String name;
private int usernum;
public String getName()
{
return name;
}
public void setName(String name)
{
this.name = name;
}
public int getUsernum()
{
return usernum;
}
public void setUsernum(int usernum)
{
this.usernum = usernum;
}
@Override
public int hashCode()
{
// TODO Auto-generated method stub
//给对象hascode码一个算法
//hashCode()的默认实现是为不同的对象返回不同的整数.
//有一个设计原则是,hashCode对于同一个对象,不管内部怎么改变,应该都返回相同的整数值.
return this.name.hashCode()+this.usernum;
}
@Override
public boolean equals(Object obj)
{
// TODO Auto-generated method stub
if(this==obj)
{
return true;
}
else if(obj instanceof User)
{
User u=(User)obj;
return (this.name+this.usernum).equals(u.name+u.usernum);
}
return false;
}
}
<br />