List集合系列文章(六) - 去除自定义对象的重复值(对象的成员变量都相同)

1. 实现方式


思路:采用的方式和去除字符串中重复值一样。
1>:创建一个新的集合;
2>:然后遍历旧的集合,获取旧集合中的每一个元素;
3>:然后判断:如果新集合中不包含该元素,就添加;
4>:然后遍历新集合就可以;

2. 实现过程遇到的问题


如果直接按照和去除字符串中重复值代码一样去做,不能达到去除重复对象的效果,必须在自定义对象 Student对象中重新equals()方法即可,直接用快捷键生成即可;

3. 具体代码如下


1>:自定义对象Student类如下:

/**
 * Email: 2185134304@qq.com
 * Created by Novate 2018/5/29 15:33
 * Version 1.0
 * Params:
 * Description:    自定义 Student对象类,并且重新equals()方法
*/

public class Student {
    private String name;
    private int age;

    public Student(String name, int age) {
        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 boolean equals(Object object) {
        if (this == object) return true;
        if (object == null || getClass() != object.getClass()) return false;

        Student student = (Student) object;

        if (age != student.age) return false;
        return name.equals(student.name);

    }

    @Override
    public int hashCode() {
        int result = name.hashCode();
        result = 31 * result + age;
        return result;
    }
}

2>:造一个新的集合,遍历旧的集合,获取旧集合中每一个元素,判断新集合中是否包含该元素,如果不包含,就添加;

/**
     * 去除自定义对象的重复值
     */
    private static void arrayListTest() {
        // 创建集合 ArrayList对象
        ArrayList<Student> arrayList = new ArrayList<>() ;

        // 创建元素
        Student s1 = new Student("王子文", 28);
        Student s2 = new Student("林心如", 22);
        Student s3 = new Student("林志玲", 20);
        Student s4 = new Student("林忆莲", 18);
        Student s5 = new Student("王子文", 18);
        Student s6 = new Student("王子文", 28);

        // 添加元素
        arrayList.add(s1) ;
        arrayList.add(s2) ;
        arrayList.add(s3) ;
        arrayList.add(s4) ;
        arrayList.add(s5) ;
        arrayList.add(s6) ;


        // 采用方式就是:新建一个集合,遍历旧的集合,获取旧集合中每一个元素,然后判断如果新集合中不包含元素,就添加,然后遍历新集合就可以
        ArrayList<Student> newArrayList = new ArrayList<Student>() ;
        // 遍历旧的集合
        for (int i = 0; i < arrayList.size(); i++) {
            // 获取旧集合中所有元素
            Student s = arrayList.get(i);

            // 判断:如果新集合中不包含旧集合中的元素,就添加
            if (!newArrayList.contains(s)){
                newArrayList.add(s) ;
            }
        }


        // 遍历新的集合
        for (int i = 0; i < newArrayList.size(); i++) {
            Student student = newArrayList.get(i);
            System.out.println(student.getName() + "---" + student.getAge());


            /*输出结果:
                    王子文---28
                    林心如---22
                    林志玲---20
                    林忆莲---18
                    王子文---18*/
        }
    }
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容