A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

package cn.itcast_02;

import java.util.ArrayList;
import java.util.Iterator;

/*
* ArrayList如果存储的是学生,那么,怎么去除重复元素呢?
* 问题:如何知道学生是重复的。
* 需求:如果学生的姓名和年龄相同,我就认为是同一个学生。即重复值。
*
* 通过简单分析,我们估计是判断那里出问题了。
* 怎么办呢?
* 看判断的方法。
* 而我们又知道,判断的方法是API提供的。不是自己的写的。
* 看源码,看底层到底怎么实现的。
* 通过看源码,我们发现,底层依赖的是equals()。
* 由于学生类中,我们并没有equals()方法,所以,默认用的是Object的方法。
* 而Object类的方法,默认比较的是地址值。
* 由于学生对象都是new出来的,地址值肯定不一样,所以从这个角度考虑结论是正确的。
* 但是不符合我们的需求。
* 肿么办?
* 重写equals(),让他按照我们的需要来比较。
*/
public class ArrayListTest3 {
        public static void main(String[] args) {
                ArrayList array = new ArrayList();

                Student s1 = new Student("郑成功", 40);
                Student s2 = new Student("戚继光", 50);
                Student s3 = new Student("戚继光", 50);
                Student s4 = new Student("岳飞", 36);
                Student s5 = new Student("岳飞", 40);
                Student s6 = new Student("林则徐", 30);

                array.add(s1);
                array.add(s2);
                array.add(s3);
                array.add(s4);
                array.add(s5);
                array.add(s6);

                // 创建新集合
                ArrayList array2 = new ArrayList();

                // 遍历旧集合,获取到每一个元素
                Iterator it = array.iterator();
                while (it.hasNext()) {
                        Student s = (Student) it.next();
                        // 在新集合中判断,看是否存在这个元素
                        if (!array2.contains(s)) {
                                // 如果s不再array2中存在,就添加
                                array2.add(s);
                        }
                }

                // array2就是没有重复元素的集合。
                // 遍历array2
                for (int x = 0; x < array2.size(); x++) {
                        Student s = (Student) array2.get(x);
                        System.out.println(s.getName() + "***" + s.getAge());
                }
        }
}


1 个回复

倒序浏览
路过!!!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马