.资料上说 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 + '\'' + '}'; }}