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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 王春晓 中级黑马   /  2013-4-18 14:31  /  1524 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 王春晓 于 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;
        }
}

毕老师的视频里的一个例子,红色的那句话是什么意思?

3 个回复

倒序浏览
  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
回复 使用道具 举报
return this.name.equals(p.name) && this.age==p.age;
就是判断是否为同一个人。  
名字和年龄一样,return true;
反之.. 你懂的
回复 使用道具 举报
本帖最后由 乘鱼飞 于 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
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马