.资料上说 List 和Set 之间的区别是依据是集合里的元素是否能够重复 是否有顺序.
我不明白的地方是 判断是否能够重复的依据是集合元素.equals()方法. 但是集合就和数组一样是引用类型 继承了Object 的equals()方法 .集合自己又重写了equals()方法.并指明是列表中的元素之间内容相等....这个列表之间是什么意思. 或者说判断是否重复的两个元素都是集合里的元素吗 .要是我自定义了类 生成的对象我该怎么重写equals()方法 根据我的需求判断两个对象相等...即 对象1.equals(对象2) 返回true...
我不明白的地方是 判断是否能够重复的依据是集合元素.equals()方法. 但是集合就和数组一样是引用类型 继承了Object 的equals()方法 .集合自己又重写了equals()方法.并指明是列表中的元素之间内容相等....这个列表之间是什么意思. 或者说判断是否重复的两个元素都是集合里的元素吗 .要是我自定义了类 生成的对象我该怎么重写equals()方法 根据我的需求判断两个对象相等...即 对象1.equals(对象2) 返回true...
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 + '\'' +
'}';
}
}import java.util.Set;
import java.util.HashSet;
import java.util.List;
import java.util.ArrayList;
public class PersonTest {
public static void main(String[] args) {
Set<Person> set=new HashSet<Person>();
Person p1=new Person("001","p1","address1","phone1");
Person p2=new Person("002","p2","address2","phone2");
Person p3=new Person("003","p3","address3","phone3");
Person p4=new Person("001","person1","address1","phone1");
set.add(p1);
set.add(p2);
set.add(p3);
set.add(p4);
System.out.println("total persons in set:"+set.size());
for(Person p:set){
System.out.println("info:"+p);
} List<Person> list=new ArrayList<Person>();
list.add(p1);
list.add(p2);
list.add(p3);
list.add(p4);
System.out.println("total persons in list:"+list.size());
for(Person p:list){
System.out.println("list item info:"+list.size());
}
}
}
集合重写equals方法,是判断两个集合是否内容一样