HashSet中的元素具有不重复和无序的特点。
在此只讨论比较在不重复特性中的作用。
首先在HashSet中定义有两个方法:int hashCode()和bloolean equals()
去重复的原理:
当数据进入HashSet的对象中的时候,调用hashCode()方法,相同则调用equals(),如果哈希值不同返回值
结论:1,为了防止出现值不同但哈希值相同,多数情况下需要重写hashCode和equals方法
假设对象类型是学生,具有年龄和姓名两个属性;
代码如下
class student{
private String name;
private int age;
student(String name,int age;){
this.name=name;
this.age=age;
}
}
此时如果使用HashSet<stdent> hs=new HashSet<student>();
hs.add(new student(“zhang”,12));
hs.add(new student(“zhang”,12));
这样的方法创建student对象,HashSet是不会去重复的,因为两对象的地址值不同,导致哈希值不同,结果无法判定重复。
此是hashSet()需要重写代码如下:
public int hashCode() { return age+name.hashCode(); }
equals重写代码如下:
public boolean equals(Object o)
{
Student s=(Student)o;
return num==new Ineger(this.age ).equals(new Ineger(s.age ))&& this.name.equals(s.name);
}