• ArrayList去除重复元素(包括字符串和自定义对象)


    1.去除重复字符串

    package com.online.msym;
    import java.util.ArrayList;
    import java.util.Iterator;
    @SuppressWarnings({ "rawtypes", "unchecked" })
    public class Demo1_ArrayList {    
        public static void main(String[] args) {
            ArrayList list = new ArrayList();
            list.add("a");
            list.add("a");
            list.add("b");
            list.add("b");
            list.add("c");
            list.add("c");
            list.add("c");
            list.add("c");
            
            ArrayList newList = getSingle(list);
            System.out.println(newList);
        }
        /*
         * 创建新集合将重复元素去掉
         * 1,明确返回值类型,返回ArrayList
         * 2,明确参数列表ArrayList
         * 
         * 分析:
         * 1,创建新集合
         * 2,根据传入的集合(老集合)获取迭代器
         * 3,遍历老集合
         * 4,通过新集合判断是否包含老集合中的元素,如果包含就不添加,如果不包含就添加
         */
        public static ArrayList getSingle(ArrayList list) {
            ArrayList tempList = new ArrayList();                    //1,创建新集合
            Iterator it = list.iterator();                            //2,根据传入的集合(老集合)获取迭代器
            
            while(it.hasNext()) {                                    //3,遍历老集合
                Object obj = it.next();                                //记录住每一个元素
                if(!tempList.contains(obj)) {                        //如果新集合中不包含老集合中的元素
                    tempList.add(obj);                                //将该元素添加
                }
            }    
            
            return tempList;
        }
    }

    2.去除ArrayList中重复自定义对象元素

    注意事项:

               必须重写equals()方法的,因为contains方法和remove方法底层都依赖于equals方法

    package com.online.msym;
    import java.util.ArrayList;
    import java.util.Iterator;
    import online.msym.bean.Person;
    @SuppressWarnings({ "rawtypes", "unchecked" })
    public class Demo2_ArrayList {
        /**
         * * 需求:ArrayList去除集合中自定义对象元素的重复值(对象的成员变量值相同,即同姓名同年龄)
             :注意事项:  重写equals()方法的
            contains方法判断是否包含,底层依赖的是equals方法
            remove方法判断是否删除,底层依赖的是equals方法
         */
        public static void main(String[] args) {
            ArrayList list = new ArrayList();                //创建集合对象
             list.add(new Person("张三", 23));
            list.add(new Person("张三", 23));
            list.add(new Person("李四", 24));
            list.add(new Person("李四", 24));
            list.add(new Person("李四", 24));
            list.add(new Person("李四", 24));
            
            //ArrayList newList = getSingle(list);            //调用方法去除重复
            //System.out.println(newList);
            list.remove(new Person("张三", 23));
            System.out.println(list);
        }
        /*
         * 创建新集合将重复元素去掉
         * 1,明确返回值类型,返回ArrayList
         * 2,明确参数列表ArrayList
         * 
         * 分析:
         * 1,创建新集合
         * 2,根据传入的集合(老集合)获取迭代器
         * 3,遍历老集合
         * 4,通过新集合判断是否包含老集合中的元素,如果包含就不添加,如果不包含就添加
         */
        public static ArrayList getSingle(ArrayList list) {
            ArrayList tempList = new ArrayList<>();                    //1,创建新集合
            Iterator it = list.iterator();                            //2,根据传入的集合(老集合)获取迭代器
            
            while(it.hasNext()) {                                    //3,遍历老集合
                Object obj = it.next();                                //记录住每一个元素
                if(!tempList.contains(obj)) {                        //如果新集合中不包含老集合中的元素
                    tempList.add(obj);                                //将该元素添加
                }
            }
            return tempList;
        }
    }

    Person实体类:

    package online.msym.bean;
    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方法,用于判断连个Person对象是否相同
        @Override
        public boolean equals(Object obj) {
            Person p = (Person)obj;
            System.out.println("equals 方法被调用了,证明contains方法底层调用的是equals");
            return this.name.equals(p.name) && this.age == p.age;
        }
        
    }

    【点击此处回到主页】

  • 相关阅读:
    uva10912 Simple Minded Hashing(DP)
    uva10401 Injured Queen Problem(DP)
    uva702 The Vindictive Coach(DP)
    忍者X4将采取自动开通vip,论坛充值淘宝自助购买均可。步骤如下
    C盘不够大,可以这样操作
    任务思维1
    PHP 获取指定日期的星期方法如下
    学学C#开发client,server,C/S架构的程序
    今天的主角就是protobuf-net
    关于忍者站群X4-小飞镖服务器配置帮助汇总。
  • 原文地址:https://www.cnblogs.com/daimajun/p/6524706.html
Copyright © 2020-2023  润新知