日期:2014-05-20  浏览次数:20657 次

关于List 和 Set 的疑问点
.资料上说 List 和Set 之间的区别是依据是集合里的元素是否能够重复 是否有顺序.
  我不明白的地方是 判断是否能够重复的依据是集合元素.equals()方法. 但是集合就和数组一样是引用类型 继承了Object 的equals()方法 .集合自己又重写了equals()方法.并指明是列表中的元素之间内容相等....这个列表之间是什么意思. 或者说判断是否重复的两个元素都是集合里的元素吗 .

要是我自定义了类 生成的对象我该怎么重写equals()方法 根据我的需求判断两个对象相等...即 对象1.equals(对象2) 返回true...

------解决方案--------------------
首先提醒你注意 结贴给分哈

给你贴一个实例,Person放到一个集合当中,业务逻辑的实现是根据Person的ID来判断的,只要ID一样就视为同一个对象,测试类里面add了4个Person ,但最后实际上只是输出了3个,就是因为最后一个添加的对象ID跟前面的重复,Set就不会继续添加了,而如果是List的话就会继续添加
Java code


public class Person{
    private String ID;
    private String name;
    private String address;


    public String getID() {
        return ID;
    }

    public void setID(String ID) {
        this.ID = ID;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    public String getTelephone() {
        return telephone;
    }

    public void setTelephone(String telephone) {
        this.telephone = telephone;
    }

    private String telephone;

    public Person(){}

    public Person(String ID, String name, String address, String telephone) {
        this.ID = ID;
        this.name = name;
        this.address = address;
        this.telephone = telephone;
    }


    @Override
    /**
     * 仅仅是按照ID比较是否是同一个Person
     */
    public boolean equals(Object o) {
        if (this == o) return true;
        if (!(o instanceof Person)) return false;

        Person person = (Person) o;

        if (ID != null ? !ID.equals(person.ID) : person.ID != null) return false;

        return true;
    }

    @Override
    public int hashCode() {
        int result = ID != null ? ID.hashCode() : 0;
//        result = 31 * result + (name != null ? name.hashCode() : 0);
//        result = 31 * result + (address != null ? address.hashCode() : 0);
//        result = 31 * result + (telephone != null ? telephone.hashCode() : 0);
        return result;
    }

    @Override
    public String toString() {
        return "Person{" +
                "ID='" + ID + '\'' +
                ", name='" + name + '\'' +
                ", address='" + address + '\'' +
                ", telephone='" + telephone + '\'' +
                '}';
    }
}