HashSet存储自定义对象如何保证唯一性

来源:互联网 发布:华为云计算ie待遇 编辑:程序博客网 时间:2024/04/26 04:08

使用HashSet并不能保证存入的对象不一样。虽然Set集合表示一种无序,不能重复的对象序列。在HashSet内部,通过哈希表来存储对象。判断两个对象是否相同的方法是HashCode方法与equals方法。如果HashCode相同,才判断调用equals判断。事实上,两个对象的HashCode是可以一样的,这个被叫做哈希冲突,哈希冲突不能被避免,只能减少。

public class Person {
private String name;
@Override
public String toString() {
return "Person [name=" + name + ", age=" + age + "]";
}
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;
}


public Person(String name, int age) {

this.name = name;
this.age = age;
}
public class Tets02 {


/**
* @param args
*/
public static void main(String[] args) {

HashSet hashSet=new HashSet();
hashSet.add(new Person("zhangsan", 25));
hashSet.add(new Person("sunqi", 22));
hashSet.add(new Person("zhaoliu", 25));
hashSet.add(new Person("lisi", 29));
hashSet.add(new Person("wangwu", 20));
hashSet.add(new Person("zhoujiu", 57));
hashSet.add(new Person("zhangsan", 25));

Iterator it=hashSet.iterator();
while(it.hasNext()){

System.out.println(it.next().toString());


}

}


}

假设对象中名字相同,年龄相同就是一个人,那么hashset是无法区分的。调用系统的HashCode方法与equals无法区分。只有重写hashcode与

equals方法才能区分。



public class Person {
private String name;
@Override
public String toString() {
return "Person [name=" + name + ", age=" + age + "]";
}
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;
}


public Person(String name, int age) {

this.name = name;
this.age = age;
}
@Override
public boolean equals(Object obj) {
if(!(obj instanceof Person)){
return false;
}
Person person=(Person)obj;
if(this==obj)
return true;//用户可能直接添加了同一个对象。

return this.getName().equals(person.getName())&&this.getAge()==person.getAge();

}
@Override
public int hashCode() {
// TODO Auto-generated method stub
return this.getName().hashCode()+this.getAge();
}









}

原创粉丝点击