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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 亦金亦水 中级黑马   /  2014-6-26 15:40  /  2077 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

关于以下代码程序,请教大家一个问题:
在类ArrayListdemo2中,我加/**/注释的部分,理解的对不对,如果不对,请高手指点!

-------------------------ArrayListdemo2 .java--------------------------------
import java.util.*;
/*使用ArrayList 实现去除集合中重复的元素,其中以人为对象插入,元素为姓名、年龄,比如两个姓名和年龄相同的人,需要排除
*分析:1、对人进行描述,然后封装
*    2、定义容器,将人存入
*    3、判断相同,取出
* */
public class ArrayListdemo2 {
        public void run(){
        ArrayList al = new ArrayList();
       
        al.add(new Person("lisi01",21));
        al.add(new Person("lisi02",22));
        al.add(new Person("lisi01",21));
       
       
       
        /*调用已经写好的去除重复的元素类,这个类中用到了contains,集合是否包含某个元素
         * 分析:contains在帮助说明里可以出,底层是调用了equals,进行判断,equals属于相当于两个对象是否相等
         * 现在属于人的对象,每插入一个人,就属于一个对象,这里判断的是 对象.equaal(对象),由于都是新创新建的,
         * 所以都不相等,所以在调用onlyElement的方法中contains进行比较,没有排除对于元素是否相等的数据。
         *
         * 由于Object 父类中的equals不满足此需求中的应用,所以在以下进行重写equals方法
         */  
        al = new ArrayListdemo().onlyElement(al); //由于这里面装的是al集合,而al集合里装的是Person对象,所以在Person里重写equals方法
                                       
        Iterator it = al.iterator();
       
        while(it.hasNext()){
                Person p =(Person) it.next();;
                pl(p.getName()+"......"+p.getAge());
        }
        }
public void pl(Object obj){
        System.out.println(obj);
}
}

class Person{
        private String name;
        private int age;
        Person(String name, int age){
                this.name = name;
                this.age = age;
        }
       
        public String getName(){
                return name;
        }
        public int getAge(){
                return age;
        }
        public boolean equals(Object obj){
                /*
                 * 重写object类中的equals()方法
                 * 1、首先判断obj对象是否属于Person类,如果不属于则返回false
                 * 2、如果属于,将obj对象降序为Person对象P,即强制转换。
                 * 3、返回本类的name字符串是否与对象p.name字符串是否相等,并且本类的age与p.age是否相等
                 * 4、如果3满足条件,则返回true,否则返回false
                 * */
                if(!(obj instanceof Person)){
                        return false;
                }               
                Person p = (Person)obj;
                return this.name.equals(p.name) && this.age == p.age;
        }
}



-------------------ArrayListdemo .java---------------------------------------------------------------




import java.util.*;
//在ArrayList对象中,排除相同的元素,只保留唯一元素
public class ArrayListdemo {
        public ArrayList onlyElement(ArrayList obj){
                ArrayList al = new ArrayList();
                Iterator it = obj.iterator();
                while(it.hasNext()){
                        Object ob = it.next();
                        if(!al.contains(ob)){
                                al.add(ob);
                        }
                }
                return al;
        }
}       




--------------------------------------------主类---------------------------
import java.util.*;


public class CollectionMain {

        public static void main(String[] args) {
                // TODO Auto-generated method stub
                //sop1();
                //sop2();
                new ArrayListdemo2().run();
        }

5 个回复

倒序浏览
学习了.
回复 使用道具 举报
学习,学习
回复 使用道具 举报
如果加上泛型的话代码会简化,也减少了很多也会减少安全隐患,而且对于迭代器的实用用for循环比较好点
for (Iterator<?> it = al.iterator();it.next();)
回复 使用道具 举报
alexsoon 发表于 2014-6-27 14:49
如果加上泛型的话代码会简化,也减少了很多也会减少安全隐患,而且对于迭代器的实用用for循环比较好点
for  ...

学习了!!!!
回复 使用道具 举报
学习了                  
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马