黑马程序员技术交流社区

标题: 【每天进步一点点】去除ArrayList存储自定义对象的重复对象 [打印本页]

作者: 鸡脑壳    时间: 2015-4-23 00:37
标题: 【每天进步一点点】去除ArrayList存储自定义对象的重复对象
首先贴代码
import java.util.ArrayList;
import java.util.Iterator;

import chenlian.pojo.Person;

/*
* 要求:        ArrayList存储自定义对象并去除重复值
*                 我们认为同姓名和同年龄的人即为同一个人。
*
* 思路:       
*                 1、创建集合
*                 2、创建集合元素
*                 3、把元素存储至集合中
*                 4、遍历判断是否有重复的对象
*/
public class Demo2 {
        public static void main(String[] args) {
                // 创建集合
                ArrayList<Person> oldList = new ArrayList<Person>();

                // 创建元素
                Person p1 = new Person("韩菱纱", 18);
                Person p2 = new Person("赵灵儿", 17);
                Person p3 = new Person("唐雪见", 20);
                Person p4 = new Person("赵灵儿", 19);
                Person p5 = new Person("韩菱纱", 18);

                // 把元素存储到集合中
                oldList.add(p1);
                oldList.add(p2);
                oldList.add(p3);
                oldList.add(p4);
                oldList.add(p5);

                // 创建新的集合存储没有重复的对象
                ArrayList<Person> newList = new ArrayList<Person>();

                // 遍历判断新集合中是否有重复的对象
                Iterator<Person> it = oldList.iterator();
                while (it.hasNext()) {
                        Person p = it.next();

                        // contains方法底层中依赖的是equals方法,所以需要在Person类中
                        // 重写Person类中的equals方法
                        if (!newList.contains(p)) {
                                newList.add(p);
                        }
                }
                //输出新的集合
                System.out.println(newList);
        }
}

/**
* 这是一个用户描述类
*
* @author 谢恒曦
*
*
*/
public class Person {
        // 创建姓名属性
        private String name;
        // 创建年龄属性
        private int age;

        public Person() {
                super();
        }

        public Person(String name, int age) {
                super();
                this.name = name;
                this.age = 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;
        }

        @Override
        public String toString() {
                return "Person [name=" + name + ", age=" + age + "]";
        }

        // 重写equals方法
        public boolean equals(Object obj) {
                // 提高效率,判断是否为对象自身
                if (this == obj) {
                        return true;
                }

                // 提高健壮性,判断对象是否为本类
                if (!(obj instanceof Person)) {
                        return false;
                }
                // 向下转型,方便操作
                Person p = (Person) obj;
                if (this.getName().equals(p.getName()) && p.getAge() == this.getAge()) {
                        return true;
                }
                return false;
        }
}


这里的旧集合中 存在 p1 与 p5 的内容完全一致, p2 与 p4 姓名相同,年龄却不同
题目要求完全相同即判定为同一个人,所以重写了Person类中的equals方法。
效果图如下







欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2