当前位置: 代码迷 >> J2SE >> Set接口有关问题2
  详细解决方案

Set接口有关问题2

热度:33   发布时间:2016-04-24 02:09:55.0
Set接口问题2
Java code
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()方法,可以去掉重复元素,可是结果没有去掉,为什么?

------解决方案--------------------
Java code
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;        }    }
------解决方案--------------------
如果是想override,在方法上加上@Override注解就可以避免很多错误
------解决方案--------------------
不要复写 直接添加
  相关解决方案