.资料上说 List 和Set 之间的区别是依据是集合里的元素是否能够重复 是否有顺序.
   我不明白的地方是 判断是否能够重复的依据是集合元素.equals()方法. 但是集合就和数组一样是引用类型 继承了Object 的equals()方法 .集合自己又重写了equals()方法.并指明是列表中的元素之间内容相等....这个列表之间是什么意思. 或者说判断是否重复的两个元素都是集合里的元素吗 .要是我自定义了类 生成的对象我该怎么重写equals()方法 根据我的需求判断两个对象相等...即 对象1.equals(对象2) 返回true...

解决方案 »

  1.   

    首先提醒你注意 结贴给分哈给你贴一个实例,Person放到一个集合当中,业务逻辑的实现是根据Person的ID来判断的,只要ID一样就视为同一个对象,测试类里面add了4个Person ,但最后实际上只是输出了3个,就是因为最后一个添加的对象ID跟前面的重复,Set就不会继续添加了,而如果是List的话就会继续添加
    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());
            }
        }
    }
      

  2.   


    集合重写equals方法,是判断两个集合是否内容一样
      

  3.   

    http://blog.csdn.net/mengxiangyue博客里有集合类的介绍
      

  4.   

    其实这样的在MyEclipse中都有键自动生存的,就像set 和get一样