黑马程序员技术交流社区

标题: 关于集合框架的一个练习 [打印本页]

作者: 王春晓    时间: 2013-4-18 14:31
标题: 关于集合框架的一个练习
本帖最后由 王春晓 于 2013-4-18 15:08 编辑

/*
将自定义对象作为元素存到ArrayList集合中,并去除重复元素。
比如:存"人"对象,同姓名同年龄,视为同一个人。为重复元素。

思路:
1、对人描述,将数据封装进人对象。
2、定义容器,将人存入。
3、取出。

List集合判断元素是否相同,依据的是元素的equals方法。
*/

import java.util.*;
class Person
{
        private String name;
        private int age;
        Person(String name,int age)
        {
                this.name = name;
                this.age = age;
        }
        public boolean equals(Object obj)
        {
                if (!(obj instanceof Person))
                        return false;

                Person p = (Person)obj;
                return this.name.equals(p.name) && this.age==p.age;
        }
        public String getName()
        {
                return name;
        }
        public int getAge()
        {
                return age;
        }
}

class  ArrayListTest2
{
        public static void sop(Object obj)
        {
                System.out.println(obj);
        }

        public static void main(String[] args)
        {
                ArrayList al = new ArrayList();
                al.add(new Person("List01",30));//al.add(Object obj);//Object obj=new Person("list",30); Person类型提升为Object。
                al.add(new Person("List02",31));
                al.add(new Person("List03",32));
                al.add(new Person("List03",32));
                al.add(new Person("List04",33));
                al.add(new Person("List05",34));
                al.add(new Person("List04",33));

                al = singleElement(al);

                Iterator it = al.iterator();

                while(it.hasNext())
                {
                        Object obj = it.next();
                        Person p = (Person)obj;//Person向下转型。
                        sop(p.getName()+"::"+p.getAge());
                }
        }

        public static ArrayList singleElement(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;
        }
}

毕老师的视频里的一个例子,红色的那句话是什么意思?
作者: 403383221    时间: 2013-4-18 14:46
  return this.name.equals(p.name) && this.age==p.age;
就是返回经过逻辑与运算后的结果啊,this.name.equals(p.name) 比较当前对象的名字与你传入的名字是否相同;this.age==p.age这个是比较年龄
因为是逻辑与运算,如果this.name.equals(p.name)返回false的话,后面的就不执行了,当两个都满足时,返回true
作者: 殇_心。    时间: 2013-4-18 14:51
return this.name.equals(p.name) && this.age==p.age;
就是判断是否为同一个人。  
名字和年龄一样,return true;
反之.. 你懂的
作者: 乘鱼飞    时间: 2013-4-18 19:00
本帖最后由 乘鱼飞 于 2013-4-18 19:02 编辑

   Person p = (Person)obj;
   return this.name.equals(p.name) && this.age==p.age;
equals方法比较俩对象
(1)要求类型相同(obj instanceof Person)
(2)要求属性值也相同(name,age)
只有这两个都满足了,才返回true




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