黑马程序员技术交流社区

标题: 关于ArrayList集合的习题 [打印本页]

作者: wyw    时间: 2015-4-13 17:30
标题: 关于ArrayList集合的习题
今天开始学习集合框架的各种知识,在视频中,穿插的讲了好几个例题,这个例题本人看了手写了4次才完整的写下来,感觉在学习集合框架的过程中,这个例题很综合,还有一些以前的知识。感觉很赞。
/*
* 将自定义对象作为元素存到ArrayList集合中,并去除重复元素
* 比如:存人对象。同姓名同年龄,视为同一个人。为重复元素
*
* 思路:
* 1、对人描述,
* 2、定义容器,将人存入
* 3、取出
*
* List集合判断元素是否相同,依据的是元素的equals方法。
*/
import java.util.ArrayList;
import java.util.Iterator;


class Person    //定义一个人的类,存放姓名、年龄。
{
        private String name;
        private int age;
        Person(String name,int age)
        {
                setName(name);
                setAge(age);
        }
        public  void setName(String name)
        {
                this.name = name;
        }
        public  void setAge(int age)
        {
                this.age = age;
        }
        public String getName()
        {
                return name;
        }
        public int getAge()
        {
                return age;
        }
        public boolean equals(Object obj)   //重写equals方法,因为Object类中只是比较地制值。
        {
                if(!(obj instanceof Person))
                        return false;
                Person p = (Person)obj;
                return this.name.equals(p.name) && this.age==p.age;
        }
       
}

public class ArrayListTest   
{

        public static void main(String[] args)
        {
                ArrayList al = new ArrayList();
                al.add(new Person("lisi01",20));
                al.add(new Person("lisi02",21));
                al.add(new Person("lisi03",23));
                al.add(new Person("lisi03",23));
                al.add(new Person("lisi04",25));
               
                Iterator it = al.iterator();
                while(it.hasNext())
                {
                        Person p = (Person)it.next();
                        System.out.println("去重复前"+p.getName()+"---"+p.getAge());
                }
                System.out.println("--------------------------");
                al = singleEmplement(al);          // 调用去重复方法
                it = al.iterator();
                while(it.hasNext())              //输出去重复后的元素
                {
                        Person p = (Person)it.next();
                        System.out.println("去重复后"+p.getName()+"---"+p.getAge());
                }
        }
       
        public static ArrayList singleEmplement(ArrayList al)      //定义一个去重复的方法
        {
                ArrayList newAl = new ArrayList();   
                Iterator it = al.iterator();
                while(it.hasNext())
                {
                        Object obj = it.next();
                        if(!(newAl.contains(obj)))
                                newAl.add(obj);
                               
                }
                return newAl;
        }

}

程序可以运行,也可以显示正确结果,可是为什么会有这样的一个错误,在Person类上面? 求指教。








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