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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 刘茂林 高级黑马   /  2013-5-13 17:09  /  1686 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 刘茂林 于 2013-5-13 23:09 编辑
  1. import java.util.ArrayList;
  2. /*
  3. *需求:将自定义对象作为元素存入ArrayList()数组中,并去除相同元素
  4. *建立人类 属性有姓名 年龄 同姓名同年龄 视为重复元素
  5. *
  6. *思路:1 对人描述 将数据封入对象
  7. * 2 定义容器 将人进行存储
  8. * 3 取出
  9. **/
  10. import java.util.Iterator;

  11. class Person
  12. {
  13.     private String name;
  14.     private int age;

  15.     Person(String name, int age)// 重写构造方法
  16.     {
  17.         this.name = name;
  18.         this.age = age;
  19.     }
  20.    
  21.     public boolean equals(Object obj)
  22.     {
  23.         if(!(obj instanceof Person))//instanceof 判断其左边对象是否为其右边类的实例
  24.         {
  25.             return false;
  26.         }
  27.         
  28.         Person p = (Person)obj;//强制转换
  29.         return this.name.equals(p.name) && this.age == p.age;
  30.     }

  31.     public String getName()
  32.     {
  33.         return name;
  34.     }

  35.     public int getAge()
  36.     {
  37.         return age;
  38.     }
  39. }

  40. public class ArrayList4
  41. {
  42.     public static void sop(Object obj)
  43.     {
  44.         System.out.println(obj);
  45.     }

  46.     public static void main(String[] args)
  47.     {
  48.         ArrayList a1 = new ArrayList();
  49.         a1.add(new Person("lisi01", 23));
  50.         a1.add(new Person("lisi02", 23));
  51.         a1.add(new Person("lisi03", 25));
  52.         a1.add(new Person("lisi04", 25));
  53.         a1.add(new Person("lisi04", 25));
  54.         
  55.         a1 = bijiao(a1);

  56.         Iterator it = a1.iterator();

  57.         while (it.hasNext())
  58.         {
  59.             // Object obj = it.next();//返回一个Object类型,因为Iterator不知道容器中是什么类型
  60.             // Person p = (Person)obj;//向下转型 将obj转成 person类型
  61.             Person p = (Person) it.next();// 一般写成这个简单形式
  62.             sop(p.getName() + "......" + p.getAge());
  63.         }
  64.     }
  65.    
  66.     public static ArrayList bijiao(ArrayList a1)
  67.     {
  68.         
  69.         //建立一个临时容器
  70.         ArrayList new1 = new ArrayList();
  71.         Iterator it = a1.iterator();//用于对a1进行遍历的 建立对象引用
  72.         while(it.hasNext())
  73.         {
  74.             Object obj = it.next();
  75.             if(!new1.contains(obj))//如果这个临时容器NEW1中不包含obj里面的元素
  76.             {
  77.                 new1.add(obj);//那么添加进入new1
  78.             }
  79.         }
  80.         
  81.         return new1;
  82.         
  83.     }

  84. }
复制代码
Person p = (Person)obj;//强制转换
        return this.name.equals(p.name) && this.age == p.age;
第一句倒是明白 是将obj 强转成Person类型  第二句有些不太明白 求解答

评分

参与人数 1技术分 +1 收起 理由
Sword + 1

查看全部评分

7 个回复

倒序浏览
第二句返回的是一个布尔型的值,且用短路与连接,即当&&两边只要有一个值是false,那么就不是同一个人
回复 使用道具 举报
本帖最后由 李征 于 2013-5-13 17:28 编辑

第二句的返回值有2种结果,第一种是TURE,表示,在&&两边都为真,即姓名和年龄都相同,也就是说是重复的学生;第二种为FALSE,表示,&&两边至少有一种为假,那么就代表不是同一个人。
回复 使用道具 举报
  return  this.name.equals(p.name) && this.age == p.age;
当且仅当 this.name 和 p.name的值相同,并且 this.age 与p.age的值也相同的时候,才返回true 即 认为两者相等
this.name.equals(p.name) 使用的是String类中的equals方法,比较两个字符串的内容是否相同。
而this.age 与p.age是基本数据类型,就代表整形数据,可以用 == 判断两者值是否相等
回复 使用道具 举报
return  this.name.equals(p.name) && this.age == p.age;
这句话就是判断是不是同一个人,返回值是boolean型。
首先要知道&&是短路的与符号。当&&当左边为假时,右边不运算,结果为假。会提高效率。

评分

参与人数 1技术分 +1 收起 理由
Sword + 1

查看全部评分

回复 使用道具 举报
this.name.equals(p.name) && this.age == p.age;
这段代码的意思就是说  比较名字和 年龄 而且用的是&& 方法 就是如果左面的为假那右面的式子
就不在进行运算了   
回复 使用道具 举报
乎¤_¤乎 发表于 2013-5-13 17:20
return  this.name.equals(p.name) && this.age == p.age;
当且仅当 this.name 和 p.name的值相同,并且  ...

多谢解惑明白了
回复 使用道具 举报
可惜分不是我的,呼呼,加油咯
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马