import java.util.*;public class HashSetDemo02 {
public static void main(String[] args) {
Set<Person> allset = new HashSet<Person>();
allset.add(new Person("张三",20));
allset.add(new Person("李四",21));
allset.add(new Person("李四",21));
allset.add(new Person("李四",21));
allset.add(new Person("李四",21));
System.out.println(allset);
}}
Person {
private String name;
private int age;
public Person(String name, int age) {
this.setName(name);
this.setAge(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;
}
//覆写equels()方法和hashCode()方法
public boolean equels(Object obj){
if(this == obj){
return true;
}
if(!(obj instanceof Person)){
return false;
}
Person p = (Person)obj;
if(this.name.equals(p.name) && this.age == p.age){
return true;
}else{
return false;
}
}
public int hashCode(){
return this.name.hashCode()*this.age;//指定公式
}
public String toString(){
return "姓名:" + this.getName() + "年龄:" + this.getAge();
}
}覆写了Object的equels()和hashCode()方法,可以去掉重复元素,可是结果没有去掉,为什么?

解决方案 »

  1.   


    public boolean equals(Object obj){  //---是equals而不是equels
            if(this == obj){
                return true;
            }
            if(!(obj instanceof Person)){
                return false;
            }
            Person p = (Person)obj;
            if(this.name.equals(p.name) && this.age == p.age){
                return true;
            }else{
                return false;
            }
        }
      

  2.   

    如果是想override,在方法上加上@Override注解就可以避免很多错误